src/unix.cpp
author Tero Marttila <terom@fixme.fi>
Fri, 18 Jul 2008 21:59:53 +0300
changeset 11176 874f8008e6e5
parent 10839 a62547c31fdb
permissions -rw-r--r--
have ShowNewGRFDownload make a copy of the GRFConfig list containg only the relevant GRFConfigs
2186
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2177
diff changeset
     1
/* $Id$ */
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2177
diff changeset
     2
10429
1b99254f9607 (svn r12971) -Documentation: add @file in files that missed them and add something more than whitespace as description of files that don't have a description.
rubidium
parents: 10295
diff changeset
     3
/** @file unix.cpp Implementation of Unix specific file handling. */
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6644
diff changeset
     4
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     5
#include "stdafx.h"
1892
45894b95a925 (svn r2398) - CodeChange: forgot to update unix and os2 specific files as well.
Darkvater
parents: 1885
diff changeset
     6
#include "openttd.h"
2159
3b634157c3b2 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2099
diff changeset
     7
#include "variables.h"
8603
88c5ce6a5215 (svn r11668) -Codechange: more refactoring aimed at reducing compile time and making it more logic where function definitions can be found.
rubidium
parents: 8602
diff changeset
     8
#include "textbuf_gui.h"
8627
448ebf3a8291 (svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents: 8603
diff changeset
     9
#include "functions.h"
448ebf3a8291 (svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents: 8603
diff changeset
    10
#include "core/random_func.hpp"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    11
8760
ce0891c412ce (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8711
diff changeset
    12
#include "table/strings.h"
ce0891c412ce (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8711
diff changeset
    13
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    14
#include <dirent.h>
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    15
#include <unistd.h>
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    16
#include <sys/stat.h>
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    17
#include <time.h>
1509
2c232b7d2114 (svn r2013) Always ignore SIGPIPE, not only when SDL is used (ShadowJK)
tron
parents: 1508
diff changeset
    18
#include <signal.h>
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    19
1850
7fa9e3ecb486 (svn r2356) Make check if statvfs() is availible a bit more sensible
tron
parents: 1687
diff changeset
    20
#if (defined(_POSIX_VERSION) && _POSIX_VERSION >= 200112L) || defined(__GLIBC__)
1597
cc09dbccddac (svn r2101) statvfs() is availible on POSIX.1 conformant systems.
tron
parents: 1596
diff changeset
    21
	#define HAS_STATVFS
cc09dbccddac (svn r2101) statvfs() is availible on POSIX.1 conformant systems.
tron
parents: 1596
diff changeset
    22
#endif
cc09dbccddac (svn r2101) statvfs() is availible on POSIX.1 conformant systems.
tron
parents: 1596
diff changeset
    23
cc09dbccddac (svn r2101) statvfs() is availible on POSIX.1 conformant systems.
tron
parents: 1596
diff changeset
    24
#ifdef HAS_STATVFS
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    25
#include <sys/statvfs.h>
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    26
#endif
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    27
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    28
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    29
#ifdef __MORPHOS__
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    30
#include <exec/types.h>
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    31
ULONG __stack = (1024*1024)*2; // maybe not that much is needed actually ;)
2356
9277224514f6 (svn r2882) Some fixes for MorphOS (by tokai)
tron
parents: 2338
diff changeset
    32
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6644
diff changeset
    33
/* The system supplied definition of SIG_IGN does not match */
2356
9277224514f6 (svn r2882) Some fixes for MorphOS (by tokai)
tron
parents: 2338
diff changeset
    34
#undef SIG_IGN
9277224514f6 (svn r2882) Some fixes for MorphOS (by tokai)
tron
parents: 2338
diff changeset
    35
#define SIG_IGN (void (*)(int))1
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    36
#endif /* __MORPHOS__ */
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    37
770
89dab23f04ca (svn r1236) MorphOS: added make release like in OSX (tokai)
bjarni
parents: 704
diff changeset
    38
#ifdef __AMIGA__
89dab23f04ca (svn r1236) MorphOS: added make release like in OSX (tokai)
bjarni
parents: 704
diff changeset
    39
#warning add stack symbol to avoid that user needs to set stack manually (tokai)
915
013cb2d74800 (svn r1402) Trim trailing whitespace
tron
parents: 826
diff changeset
    40
// ULONG __stack =
770
89dab23f04ca (svn r1236) MorphOS: added make release like in OSX (tokai)
bjarni
parents: 704
diff changeset
    41
#endif
89dab23f04ca (svn r1236) MorphOS: added make release like in OSX (tokai)
bjarni
parents: 704
diff changeset
    42
2188
9acde6fcc645 (svn r2703) - Feature: [OSX] Added a native alert window to show whatever error() needs to print (Tobin made this, while I fixed some issued in it)
bjarni
parents: 2186
diff changeset
    43
#if defined(__APPLE__)
2217
c3a8a3bbc81f (svn r2735) -Fix: [OSX] fixed issue introduced in 2733 where dedicated servers on OSX included sdl.h even when WITH_SDL was not defined (oops)
bjarni
parents: 2215
diff changeset
    44
	#if defined(WITH_SDL)
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6644
diff changeset
    45
		/*the mac implementation needs this file included in the same file as main() */
2217
c3a8a3bbc81f (svn r2735) -Fix: [OSX] fixed issue introduced in 2733 where dedicated servers on OSX included sdl.h even when WITH_SDL was not defined (oops)
bjarni
parents: 2215
diff changeset
    46
		#include <SDL.h>
c3a8a3bbc81f (svn r2735) -Fix: [OSX] fixed issue introduced in 2733 where dedicated servers on OSX included sdl.h even when WITH_SDL was not defined (oops)
bjarni
parents: 2215
diff changeset
    47
	#endif
2188
9acde6fcc645 (svn r2703) - Feature: [OSX] Added a native alert window to show whatever error() needs to print (Tobin made this, while I fixed some issued in it)
bjarni
parents: 2186
diff changeset
    48
#endif
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    49
4221
bb06fe8dcce2 (svn r5765) - Codechange: Fully unify the OS-specific FiosGet...List functions into fios.c, as well as FiosGetSavegameList and FiosGetScenarioList functions with the help of some callbacks.
Darkvater
parents: 4220
diff changeset
    50
bool FiosIsRoot(const char *path)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    51
{
4221
bb06fe8dcce2 (svn r5765) - Codechange: Fully unify the OS-specific FiosGet...List functions into fios.c, as well as FiosGetSavegameList and FiosGetScenarioList functions with the help of some callbacks.
Darkvater
parents: 4220
diff changeset
    52
#if !defined(__MORPHOS__) && !defined(__AMIGAOS__)
bb06fe8dcce2 (svn r5765) - Codechange: Fully unify the OS-specific FiosGet...List functions into fios.c, as well as FiosGetSavegameList and FiosGetScenarioList functions with the help of some callbacks.
Darkvater
parents: 4220
diff changeset
    53
	return path[1] == '\0';
bb06fe8dcce2 (svn r5765) - Codechange: Fully unify the OS-specific FiosGet...List functions into fios.c, as well as FiosGetSavegameList and FiosGetScenarioList functions with the help of some callbacks.
Darkvater
parents: 4220
diff changeset
    54
#else
bb06fe8dcce2 (svn r5765) - Codechange: Fully unify the OS-specific FiosGet...List functions into fios.c, as well as FiosGetSavegameList and FiosGetScenarioList functions with the help of some callbacks.
Darkvater
parents: 4220
diff changeset
    55
	/* On MorphOS or AmigaOS paths look like: "Volume:directory/subdirectory" */
bb06fe8dcce2 (svn r5765) - Codechange: Fully unify the OS-specific FiosGet...List functions into fios.c, as well as FiosGetSavegameList and FiosGetScenarioList functions with the help of some callbacks.
Darkvater
parents: 4220
diff changeset
    56
	const char *s = strchr(path, ':');
7128
1f92a89c933e (svn r9861) -Fix: null pointer derefence under MorphOS and AmigaOS.
rubidium
parents: 6919
diff changeset
    57
	return s != NULL && s[1] == '\0';
4221
bb06fe8dcce2 (svn r5765) - Codechange: Fully unify the OS-specific FiosGet...List functions into fios.c, as well as FiosGetSavegameList and FiosGetScenarioList functions with the help of some callbacks.
Darkvater
parents: 4220
diff changeset
    58
#endif
bb06fe8dcce2 (svn r5765) - Codechange: Fully unify the OS-specific FiosGet...List functions into fios.c, as well as FiosGetSavegameList and FiosGetScenarioList functions with the help of some callbacks.
Darkvater
parents: 4220
diff changeset
    59
}
bb06fe8dcce2 (svn r5765) - Codechange: Fully unify the OS-specific FiosGet...List functions into fios.c, as well as FiosGetSavegameList and FiosGetScenarioList functions with the help of some callbacks.
Darkvater
parents: 4220
diff changeset
    60
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6566
diff changeset
    61
void FiosGetDrives()
4221
bb06fe8dcce2 (svn r5765) - Codechange: Fully unify the OS-specific FiosGet...List functions into fios.c, as well as FiosGetSavegameList and FiosGetScenarioList functions with the help of some callbacks.
Darkvater
parents: 4220
diff changeset
    62
{
bb06fe8dcce2 (svn r5765) - Codechange: Fully unify the OS-specific FiosGet...List functions into fios.c, as well as FiosGetSavegameList and FiosGetScenarioList functions with the help of some callbacks.
Darkvater
parents: 4220
diff changeset
    63
	return;
bb06fe8dcce2 (svn r5765) - Codechange: Fully unify the OS-specific FiosGet...List functions into fios.c, as well as FiosGetSavegameList and FiosGetScenarioList functions with the help of some callbacks.
Darkvater
parents: 4220
diff changeset
    64
}
bb06fe8dcce2 (svn r5765) - Codechange: Fully unify the OS-specific FiosGet...List functions into fios.c, as well as FiosGetSavegameList and FiosGetScenarioList functions with the help of some callbacks.
Darkvater
parents: 4220
diff changeset
    65
4222
951fbf19b1ad (svn r5766) - Cleanup: Unify FiosBrowseTo and FiosGetDescText
Darkvater
parents: 4221
diff changeset
    66
bool FiosGetDiskFreeSpace(const char *path, uint32 *tot)
951fbf19b1ad (svn r5766) - Cleanup: Unify FiosBrowseTo and FiosGetDescText
Darkvater
parents: 4221
diff changeset
    67
{
951fbf19b1ad (svn r5766) - Cleanup: Unify FiosBrowseTo and FiosGetDescText
Darkvater
parents: 4221
diff changeset
    68
	uint32 free = 0;
951fbf19b1ad (svn r5766) - Cleanup: Unify FiosBrowseTo and FiosGetDescText
Darkvater
parents: 4221
diff changeset
    69
951fbf19b1ad (svn r5766) - Cleanup: Unify FiosBrowseTo and FiosGetDescText
Darkvater
parents: 4221
diff changeset
    70
#ifdef HAS_STATVFS
8481
cf854106761d (svn r11541) -Fix: [OSX] detect statvfs at runtime (based on OSX version) instead of compile time
bjarni
parents: 8431
diff changeset
    71
# ifdef __APPLE__
cf854106761d (svn r11541) -Fix: [OSX] detect statvfs at runtime (based on OSX version) instead of compile time
bjarni
parents: 8431
diff changeset
    72
	/* OSX 10.3 lacks statvfs so don't try to use it even though later versions of OSX has it. */
cf854106761d (svn r11541) -Fix: [OSX] detect statvfs at runtime (based on OSX version) instead of compile time
bjarni
parents: 8431
diff changeset
    73
	if (MacOSVersionIsAtLeast(10, 4, 0))
cf854106761d (svn r11541) -Fix: [OSX] detect statvfs at runtime (based on OSX version) instead of compile time
bjarni
parents: 8431
diff changeset
    74
# endif
4222
951fbf19b1ad (svn r5766) - Cleanup: Unify FiosBrowseTo and FiosGetDescText
Darkvater
parents: 4221
diff changeset
    75
	{
951fbf19b1ad (svn r5766) - Cleanup: Unify FiosBrowseTo and FiosGetDescText
Darkvater
parents: 4221
diff changeset
    76
		struct statvfs s;
951fbf19b1ad (svn r5766) - Cleanup: Unify FiosBrowseTo and FiosGetDescText
Darkvater
parents: 4221
diff changeset
    77
951fbf19b1ad (svn r5766) - Cleanup: Unify FiosBrowseTo and FiosGetDescText
Darkvater
parents: 4221
diff changeset
    78
		if (statvfs(path, &s) != 0) return false;
951fbf19b1ad (svn r5766) - Cleanup: Unify FiosBrowseTo and FiosGetDescText
Darkvater
parents: 4221
diff changeset
    79
		free = (uint64)s.f_frsize * s.f_bavail >> 20;
951fbf19b1ad (svn r5766) - Cleanup: Unify FiosBrowseTo and FiosGetDescText
Darkvater
parents: 4221
diff changeset
    80
	}
951fbf19b1ad (svn r5766) - Cleanup: Unify FiosBrowseTo and FiosGetDescText
Darkvater
parents: 4221
diff changeset
    81
#endif
951fbf19b1ad (svn r5766) - Cleanup: Unify FiosBrowseTo and FiosGetDescText
Darkvater
parents: 4221
diff changeset
    82
	if (tot != NULL) *tot = free;
951fbf19b1ad (svn r5766) - Cleanup: Unify FiosBrowseTo and FiosGetDescText
Darkvater
parents: 4221
diff changeset
    83
	return true;
951fbf19b1ad (svn r5766) - Cleanup: Unify FiosBrowseTo and FiosGetDescText
Darkvater
parents: 4221
diff changeset
    84
}
951fbf19b1ad (svn r5766) - Cleanup: Unify FiosBrowseTo and FiosGetDescText
Darkvater
parents: 4221
diff changeset
    85
4221
bb06fe8dcce2 (svn r5765) - Codechange: Fully unify the OS-specific FiosGet...List functions into fios.c, as well as FiosGetSavegameList and FiosGetScenarioList functions with the help of some callbacks.
Darkvater
parents: 4220
diff changeset
    86
bool FiosIsValidFile(const char *path, const struct dirent *ent, struct stat *sb)
bb06fe8dcce2 (svn r5765) - Codechange: Fully unify the OS-specific FiosGet...List functions into fios.c, as well as FiosGetSavegameList and FiosGetScenarioList functions with the help of some callbacks.
Darkvater
parents: 4220
diff changeset
    87
{
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    88
	char filename[MAX_PATH];
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    89
4221
bb06fe8dcce2 (svn r5765) - Codechange: Fully unify the OS-specific FiosGet...List functions into fios.c, as well as FiosGetSavegameList and FiosGetScenarioList functions with the help of some callbacks.
Darkvater
parents: 4220
diff changeset
    90
#if defined(__MORPHOS__) || defined(__AMIGAOS__)
bb06fe8dcce2 (svn r5765) - Codechange: Fully unify the OS-specific FiosGet...List functions into fios.c, as well as FiosGetSavegameList and FiosGetScenarioList functions with the help of some callbacks.
Darkvater
parents: 4220
diff changeset
    91
	/* On MorphOS or AmigaOS paths look like: "Volume:directory/subdirectory" */
bb06fe8dcce2 (svn r5765) - Codechange: Fully unify the OS-specific FiosGet...List functions into fios.c, as well as FiosGetSavegameList and FiosGetScenarioList functions with the help of some callbacks.
Darkvater
parents: 4220
diff changeset
    92
	if (FiosIsRoot(path)) {
bb06fe8dcce2 (svn r5765) - Codechange: Fully unify the OS-specific FiosGet...List functions into fios.c, as well as FiosGetSavegameList and FiosGetScenarioList functions with the help of some callbacks.
Darkvater
parents: 4220
diff changeset
    93
		snprintf(filename, lengthof(filename), "%s:%s", path, ent->d_name);
bb06fe8dcce2 (svn r5765) - Codechange: Fully unify the OS-specific FiosGet...List functions into fios.c, as well as FiosGetSavegameList and FiosGetScenarioList functions with the help of some callbacks.
Darkvater
parents: 4220
diff changeset
    94
	} else // XXX - only next line!
7251
19f5ab36616e (svn r9990) -Fix: MorphOS and AmigaOS do not like "//" in filenames as that means the same as "/../" in means in Unix.
rubidium
parents: 7128
diff changeset
    95
#else
19f5ab36616e (svn r9990) -Fix: MorphOS and AmigaOS do not like "//" in filenames as that means the same as "/../" in means in Unix.
rubidium
parents: 7128
diff changeset
    96
	assert(path[strlen(path) - 1] == PATHSEPCHAR);
19f5ab36616e (svn r9990) -Fix: MorphOS and AmigaOS do not like "//" in filenames as that means the same as "/../" in means in Unix.
rubidium
parents: 7128
diff changeset
    97
	if (strlen(path) > 2) assert(path[strlen(path) - 2] != PATHSEPCHAR);
4221
bb06fe8dcce2 (svn r5765) - Codechange: Fully unify the OS-specific FiosGet...List functions into fios.c, as well as FiosGetSavegameList and FiosGetScenarioList functions with the help of some callbacks.
Darkvater
parents: 4220
diff changeset
    98
#endif
7251
19f5ab36616e (svn r9990) -Fix: MorphOS and AmigaOS do not like "//" in filenames as that means the same as "/../" in means in Unix.
rubidium
parents: 7128
diff changeset
    99
	snprintf(filename, lengthof(filename), "%s%s", path, ent->d_name);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   100
6566
a780a47d6af3 (svn r9043) -Fix [FS#652]: the personal (.openttd) directories were hidden in the load/save directory listings (stepancheg).
rubidium
parents: 6348
diff changeset
   101
	return stat(filename, sb) == 0;
a780a47d6af3 (svn r9043) -Fix [FS#652]: the personal (.openttd) directories were hidden in the load/save directory listings (stepancheg).
rubidium
parents: 6348
diff changeset
   102
}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   103
6566
a780a47d6af3 (svn r9043) -Fix [FS#652]: the personal (.openttd) directories were hidden in the load/save directory listings (stepancheg).
rubidium
parents: 6348
diff changeset
   104
bool FiosIsHiddenFile(const struct dirent *ent)
a780a47d6af3 (svn r9043) -Fix [FS#652]: the personal (.openttd) directories were hidden in the load/save directory listings (stepancheg).
rubidium
parents: 6348
diff changeset
   105
{
a780a47d6af3 (svn r9043) -Fix [FS#652]: the personal (.openttd) directories were hidden in the load/save directory listings (stepancheg).
rubidium
parents: 6348
diff changeset
   106
	return ent->d_name[0] == '.';
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   107
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   108
3329
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   109
#ifdef WITH_ICONV
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   110
3332
fd5624e59753 (svn r4109) - Fix (r4105) [iconv]: Only include the needed headers when ICONV is actually used. Thanks for noticing Bjarni
Darkvater
parents: 3330
diff changeset
   111
#include <iconv.h>
fd5624e59753 (svn r4109) - Fix (r4105) [iconv]: Only include the needed headers when ICONV is actually used. Thanks for noticing Bjarni
Darkvater
parents: 3330
diff changeset
   112
#include <errno.h>
fd5624e59753 (svn r4109) - Fix (r4105) [iconv]: Only include the needed headers when ICONV is actually used. Thanks for noticing Bjarni
Darkvater
parents: 3330
diff changeset
   113
#include "debug.h"
8711
d70c2ff34e33 (svn r11778) -Fix: compiles with ICONV failed.
rubidium
parents: 8710
diff changeset
   114
#include "string_func.h"
3332
fd5624e59753 (svn r4109) - Fix (r4105) [iconv]: Only include the needed headers when ICONV is actually used. Thanks for noticing Bjarni
Darkvater
parents: 3330
diff changeset
   115
10295
78026adac8e1 (svn r12836) -Fix: SunOS non-dedicated server compilation.
rubidium
parents: 8760
diff changeset
   116
const char *GetCurrentLocale(const char *param);
78026adac8e1 (svn r12836) -Fix: SunOS non-dedicated server compilation.
rubidium
parents: 8760
diff changeset
   117
5108
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 4369
diff changeset
   118
#define INTERNALCODE "UTF-8"
3329
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   119
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   120
/** Try and try to decipher the current locale from environmental
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   121
 * variables. MacOSX is hardcoded, other OS's are dynamic. If no suitable
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   122
 * locale can be found, don't do any conversion "" */
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6566
diff changeset
   123
static const char *GetLocalCode()
3260
7d22aa47de3b (svn r3966) -Fix: [OSX and some linux] [ 1157244 ] Can't save game if name contains german umlauts
bjarni
parents: 2952
diff changeset
   124
{
3408
313f35564673 (svn r4219) - Add support for WITH_ICONV. It is enabled by default for OSX > 10.3 for all others set it with WITH_ICONV in Makefile.config or with --with-iconv with configure. --with-config=/somedir will search for iconv include files somewhere (or in Makefile.config with WITH_ICONV_PATH). Custom library loading is not (yet) supported
Darkvater
parents: 3332
diff changeset
   125
#if defined(__APPLE__)
3329
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   126
	return "UTF-8-MAC";
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   127
#else
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   128
	/* Strip locale (eg en_US.UTF-8) to only have UTF-8 */
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   129
	const char *locale = GetCurrentLocale("LC_CTYPE");
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   130
	if (locale != NULL) locale = strchr(locale, '.');
3260
7d22aa47de3b (svn r3966) -Fix: [OSX and some linux] [ 1157244 ] Can't save game if name contains german umlauts
bjarni
parents: 2952
diff changeset
   131
3329
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   132
	return (locale == NULL) ? "" : locale + 1;
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   133
#endif
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   134
}
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   135
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   136
/** FYI: This is not thread-safe.
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   137
 * convert between locales, which from and which to is set in the calling
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   138
 * functions OTTD2FS() and FS2OTTD(). You should NOT use this function directly
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   139
 * NOTE: iconv was added in OSX 10.3. 10.2.x will still have the invalid char
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   140
 * issues. There aren't any easy fix for this */
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   141
static const char *convert_tofrom_fs(iconv_t convd, const char *name)
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   142
{
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   143
	static char buf[1024];
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   144
	/* Work around buggy iconv implementation where inbuf is wrongly typed as
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   145
	 * non-const. Correct implementation is at
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   146
	 * http://www.opengroup.org/onlinepubs/007908799/xsh/iconv.html */
8335
9ebc441dddde (svn r11389) -Fix [FS#1386]: Replace calls to deprecated API with newer ones and handle broken iconv declaration in OSX 10.5.
egladil
parents: 7251
diff changeset
   147
#ifdef HAVE_BROKEN_ICONV
3329
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   148
	char *inbuf = (char*)name;
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   149
#else
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   150
	const char *inbuf = name;
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   151
#endif
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   152
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   153
	char *outbuf  = buf;
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   154
	size_t outlen = sizeof(buf) - 1;
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   155
	size_t inlen  = strlen(name);
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   156
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   157
	ttd_strlcpy(outbuf, name, sizeof(buf));
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   158
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   159
	iconv(convd, NULL, NULL, NULL, NULL);
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   160
	if (iconv(convd, &inbuf, &inlen, &outbuf, &outlen) == (size_t)(-1)) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5296
diff changeset
   161
		DEBUG(misc, 0, "[iconv] error converting '%s'. Errno %d", name, errno);
3260
7d22aa47de3b (svn r3966) -Fix: [OSX and some linux] [ 1157244 ] Can't save game if name contains german umlauts
bjarni
parents: 2952
diff changeset
   162
	}
3329
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   163
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   164
	*outbuf = '\0';
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6644
diff changeset
   165
	/* FIX: invalid characters will abort conversion, but they shouldn't occur? */
3329
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   166
	return buf;
3260
7d22aa47de3b (svn r3966) -Fix: [OSX and some linux] [ 1157244 ] Can't save game if name contains german umlauts
bjarni
parents: 2952
diff changeset
   167
}
3329
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   168
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   169
/** Convert from OpenTTD's encoding to that of the local environment
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   170
 * @param name pointer to a valid string that will be converted
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   171
 * @return pointer to a new stringbuffer that contains the converted string */
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   172
const char *OTTD2FS(const char *name)
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   173
{
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   174
	static iconv_t convd = (iconv_t)(-1);
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   175
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   176
	if (convd == (iconv_t)(-1)) {
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   177
		const char *env = GetLocalCode();
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   178
		convd = iconv_open(env, INTERNALCODE);
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   179
		if (convd == (iconv_t)(-1)) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5296
diff changeset
   180
			DEBUG(misc, 0, "[iconv] conversion from codeset '%s' to '%s' unsupported", INTERNALCODE, env);
3329
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   181
			return name;
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   182
		}
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   183
	}
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   184
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   185
	return convert_tofrom_fs(convd, name);
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   186
}
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   187
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   188
/** Convert to OpenTTD's encoding from that of the local environment
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   189
 * @param name pointer to a valid string that will be converted
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   190
 * @return pointer to a new stringbuffer that contains the converted string */
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   191
const char *FS2OTTD(const char *name)
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   192
{
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   193
	static iconv_t convd = (iconv_t)(-1);
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   194
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   195
	if (convd == (iconv_t)(-1)) {
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   196
		const char *env = GetLocalCode();
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   197
		convd = iconv_open(INTERNALCODE, env);
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   198
		if (convd == (iconv_t)(-1)) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5296
diff changeset
   199
			DEBUG(misc, 0, "[iconv] conversion from codeset '%s' to '%s' unsupported", env, INTERNALCODE);
3329
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   200
			return name;
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   201
		}
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   202
	}
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   203
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   204
	return convert_tofrom_fs(convd, name);
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   205
}
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   206
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   207
#else
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   208
const char *FS2OTTD(const char *name) {return name;}
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   209
const char *OTTD2FS(const char *name) {return name;}
992d1f7cb747 (svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents: 3294
diff changeset
   210
#endif /* WITH_ICONV */
10448
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   211
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   212
void ShowInfo(const char *str)
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   213
{
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   214
	fprintf(stderr, "%s\n", str);
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   215
}
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   216
10839
a62547c31fdb (svn r13390) -Codechange: introduce usererror() for fatal but not openttd related errors. Now all error() will 'crash' openttd after showing the message in win32 releases (MSVC), creating a crash.log and crash.dmp (like the '!' hack used before). On the other hand, usererror() will just close the game. So use error() only when it can be helpful to debugging, else use usererror().
glx
parents: 10448
diff changeset
   217
void ShowOSErrorBox(const char *buf, bool system)
10448
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   218
{
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   219
#if defined(__APPLE__)
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   220
	/* this creates an NSAlertPanel with the contents of 'buf'
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   221
	 * this is the native and nicest way to do this on OSX */
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   222
	ShowMacDialog( buf, "See readme for more info\nMost likely you are missing files from the original TTD", "Quit" );
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   223
#else
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   224
	/* all systems, but OSX */
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   225
	fprintf(stderr, "\033[1;31mError: %s\033[0;39m\n", buf);
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   226
#endif
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   227
}
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   228
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   229
#ifdef WITH_COCOA
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   230
void cocoaSetupAutoreleasePool();
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   231
void cocoaReleaseAutoreleasePool();
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   232
#endif
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   233
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   234
int CDECL main(int argc, char* argv[])
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   235
{
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   236
	int ret;
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   237
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   238
#ifdef WITH_COCOA
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   239
	cocoaSetupAutoreleasePool();
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   240
	/* This is passed if we are launched by double-clicking */
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   241
	if (argc >= 2 && strncmp(argv[1], "-psn", 4) == 0) {
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   242
		argv[1] = NULL;
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   243
		argc = 1;
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   244
	}
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   245
#endif
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   246
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   247
	SetRandomSeed(time(NULL));
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   248
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   249
	signal(SIGPIPE, SIG_IGN);
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   250
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   251
	ret = ttd_main(argc, argv);
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   252
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   253
#ifdef WITH_COCOA
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   254
	cocoaReleaseAutoreleasePool();
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   255
#endif
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   256
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   257
	return ret;
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   258
}
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   259
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   260
bool InsertTextBufferClipboard(Textbuf *tb)
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   261
{
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   262
	return false;
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   263
}
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   264
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   265
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   266
/* multi os compatible sleep function */
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   267
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   268
#ifdef __AMIGA__
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   269
/* usleep() implementation */
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   270
#	include <devices/timer.h>
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   271
#	include <dos/dos.h>
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   272
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   273
	extern struct Device      *TimerBase    = NULL;
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   274
	extern struct MsgPort     *TimerPort    = NULL;
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   275
	extern struct timerequest *TimerRequest = NULL;
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   276
#endif // __AMIGA__
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   277
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   278
void CSleep(int milliseconds)
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   279
{
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   280
	#if defined(PSP)
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   281
		sceKernelDelayThread(milliseconds * 1000);
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   282
	#elif defined(__BEOS__)
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   283
		snooze(milliseconds * 1000);
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   284
	#elif defined(__AMIGA__)
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   285
	{
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   286
		ULONG signals;
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   287
		ULONG TimerSigBit = 1 << TimerPort->mp_SigBit;
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   288
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   289
		/* send IORequest */
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   290
		TimerRequest->tr_node.io_Command = TR_ADDREQUEST;
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   291
		TimerRequest->tr_time.tv_secs    = (milliseconds * 1000) / 1000000;
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   292
		TimerRequest->tr_time.tv_micro   = (milliseconds * 1000) % 1000000;
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   293
		SendIO((struct IORequest *)TimerRequest);
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   294
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   295
		if (!((signals = Wait(TimerSigBit | SIGBREAKF_CTRL_C)) & TimerSigBit) ) {
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   296
			AbortIO((struct IORequest *)TimerRequest);
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   297
		}
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   298
		WaitIO((struct IORequest *)TimerRequest);
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   299
	}
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   300
	#else
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   301
		usleep(milliseconds * 1000);
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   302
	#endif
6c45a7f6810b (svn r12990) -Fix: silence the redundanct declaration warning when compiling with iconv.
rubidium
parents: 10429
diff changeset
   303
}