~ubuntu-branches/ubuntu/raring/simutrans/raring-proposed

« back to all changes in this revision

Viewing changes to simsys_s.cc

  • Committer: Package Import Robot
  • Author(s): Ansgar Burchardt
  • Date: 2011-11-03 19:59:02 UTC
  • mfrom: (1.2.7)
  • Revision ID: package-import@ubuntu.com-20111103195902-uopgwf488mfctb75
Tags: 111.0-1
* New upstream release.
* debian/rules: Update get-orig-source target for new upstream release.
* Use xz compression for source and binary packages.
* Use override_* targets to simplify debian/rules.

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
#define NOMINMAX 1
18
18
#include <windows.h>
19
19
#else
20
 
#include <sys/stat.h>
 
20
#       include "limits.h"
21
21
#ifndef __HAIKU__
22
22
#include <sys/errno.h>
23
23
#else
32
32
#include <stdlib.h>
33
33
#include <math.h>
34
34
 
35
 
#ifndef PATH_MAX
36
 
#define PATH_MAX (1024)
37
 
#endif
38
 
 
39
35
#undef min
40
36
#undef max
41
37
 
42
38
#include "macros.h"
43
39
#include "simmain.h"
 
40
#include "simsys_w32_png.h"
44
41
#include "simversion.h"
45
42
#include "simsys.h"
46
43
#include "simevent.h"
138
135
}
139
136
 
140
137
 
141
 
/* maximum size possible (if there) */
142
 
int dr_query_screen_width()
143
 
{
144
 
#if SDL_VERSIONNUM(SDL_MAJOR_VERSION,SDL_MINOR_VERSION,SDL_PATCHLEVEL)>=1210
145
 
        const SDL_VideoInfo *vi=SDL_GetVideoInfo();
146
 
        return vi->current_w;
147
 
#else
148
 
#ifdef _WIN32
149
 
        return GetSystemMetrics( SM_CXSCREEN );
150
 
#else
151
 
        SDL_Rect **modi;
152
 
        modi = SDL_ListModes (NULL, SDL_FULLSCREEN );
153
 
        if (modi == NULL  ||  modi == (SDL_Rect**)-1  ) {
154
 
                return 704;
155
 
        }
156
 
        else {
157
 
                // return first
158
 
                return modi[0]->w;
159
 
        }
160
 
#endif
161
 
#endif
162
 
}
163
 
 
164
 
 
165
 
 
166
 
int dr_query_screen_height()
167
 
{
168
 
#if SDL_VERSIONNUM(SDL_MAJOR_VERSION,SDL_MINOR_VERSION,SDL_PATCHLEVEL)>=1210
169
 
        const SDL_VideoInfo *vi=SDL_GetVideoInfo();
170
 
        return vi->current_h;
171
 
#else
172
 
#ifdef _WIN32
173
 
        return GetSystemMetrics( SM_CYSCREEN );
174
 
#else
175
 
        SDL_Rect **modi;
176
 
        modi = SDL_ListModes (NULL, SDL_FULLSCREEN );
177
 
        if (modi == NULL  ||  modi == (SDL_Rect**)-1  ) {
178
 
                return 704;
179
 
        }
180
 
        else {
181
 
                // return first
182
 
                return modi[0]->h;
183
 
        }
184
 
#endif
185
 
#endif
 
138
resolution dr_query_screen_resolution()
 
139
{
 
140
        resolution res;
 
141
#if SDL_VERSION_ATLEAST(1, 2, 10)
 
142
        SDL_VideoInfo const& vi = *SDL_GetVideoInfo();
 
143
        res.w = vi.current_w;
 
144
        res.h = vi.current_h;
 
145
#elif defined _WIN32
 
146
        res.w = GetSystemMetrics(SM_CXSCREEN);
 
147
        res.h = GetSystemMetrics(SM_CYSCREEN);
 
148
#else
 
149
        SDL_Rect** const modi = SDL_ListModes(0, SDL_FULLSCREEN);
 
150
        if (modi && modi != (SDL_Rect**)-1) {
 
151
                // return first
 
152
                res.w = modi[0]->w;
 
153
                res.h = modi[0]->h;
 
154
        } else {
 
155
                res.w = 704;
 
156
                res.h = 560;
 
157
        }
 
158
#endif
 
159
        return res;
186
160
}
187
161
 
188
162
 
190
164
 
191
165
 
192
166
// open the window
193
 
int dr_os_open(int w, int h, int bpp, int fullscreen)
 
167
int dr_os_open(int w, int const h, int const fullscreen)
194
168
{
195
169
        Uint32 flags = sync_blit ? 0 : SDL_ASYNCBLIT;
196
170
 
215
189
#endif
216
190
 
217
191
        // open the window now
218
 
        screen = SDL_SetVideoMode(w, h, bpp, flags);
 
192
        screen = SDL_SetVideoMode(w, h, COLOUR_DEPTH, flags);
219
193
        if (screen == NULL) {
220
194
                fprintf(stderr, "Couldn't open the window: %s\n", SDL_GetError());
221
195
                return 0;
251
225
 
252
226
 
253
227
// resizes screen
254
 
int dr_textur_resize(unsigned short** textur, int w, int h, int bpp)
 
228
int dr_textur_resize(unsigned short** const textur, int w, int const h)
255
229
{
256
230
#ifdef USE_HW
257
231
        SDL_UnlockSurface(screen);
272
246
                width = w;
273
247
                height = h;
274
248
 
275
 
                screen = SDL_SetVideoMode(w, h, bpp, flags);
 
249
                screen = SDL_SetVideoMode(w, h, COLOUR_DEPTH, flags);
276
250
                printf("textur_resize()::screen=%p\n", screen);
277
251
                if (screen) {
278
252
                        DBG_MESSAGE("dr_textur_resize(SDL)", "SDL realized screen size width=%d, height=%d (requested w=%d, h=%d)", screen->w, screen->h, w, h);
289
263
}
290
264
 
291
265
 
292
 
 
293
 
// query home directory
294
 
char *dr_query_homedir(void)
295
 
{
296
 
        static char buffer[PATH_MAX];
297
 
        char b2[PATH_MAX];
298
 
#ifdef _WIN32
299
 
        DWORD len=PATH_MAX-24;
300
 
        HKEY hHomeDir;
301
 
        if(RegOpenKeyExA(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", 0, KEY_READ, &hHomeDir)==ERROR_SUCCESS) {
302
 
                RegQueryValueExA(hHomeDir,"Personal",NULL,NULL,(BYTE *)buffer,&len);
303
 
                strcat(buffer,"\\Simutrans");
304
 
                CreateDirectoryA( buffer, NULL );
305
 
                strcat(buffer, "\\");
306
 
 
307
 
                // create other subdirectories
308
 
                sprintf(b2, "%ssave", buffer );
309
 
                CreateDirectoryA( b2, NULL );
310
 
                sprintf(b2, "%sscreenshot", buffer );
311
 
                CreateDirectoryA( b2, NULL );
312
 
                sprintf(b2, "%smaps", buffer );
313
 
                CreateDirectoryA( b2, NULL );
314
 
 
315
 
                return buffer;
316
 
        }
317
 
        return NULL;
318
 
#else
319
 
#ifndef __APPLE__
320
 
        sprintf( buffer, "%s/.simutrans", getenv("HOME") );
321
 
#else
322
 
        sprintf( buffer, "%s/Library/Simutrans", getenv("HOME") );
323
 
#endif
324
 
        int err = mkdir( buffer, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH );
325
 
        if(err  &&  err!=EEXIST) {
326
 
                // could not create directory
327
 
                // we assume success anyway
328
 
        }
329
 
        strcat( buffer, "/" );
330
 
        sprintf( b2, "%smaps", buffer );
331
 
        mkdir( b2, 0700 );
332
 
        sprintf( b2, "%sscreenshot", buffer );
333
 
        mkdir( b2, 0700 );
334
 
        sprintf( b2, "%ssave", buffer );
335
 
        mkdir( b2, 0700 );
336
 
        return buffer;
337
 
#endif
338
 
}
339
 
 
340
 
 
341
 
 
342
266
unsigned short *dr_textur_init()
343
267
{
344
268
#ifdef USE_HW
427
351
}
428
352
 
429
353
 
430
 
 
431
 
 
432
 
// try saving png using gdiplus.dll
433
 
extern "C" int dr_screenshot_png(const char *filename,  int w, int h, int max_width, unsigned short *data, int bitdepth );
434
 
 
435
354
/**
436
355
 * Some wrappers can save screenshots.
437
356
 * @return 1 on success, 0 if not implemented for a particular wrapper and -1
592
511
                                case SDLK_PAGEUP:   code = '>';                           break;
593
512
                                case SDLK_RIGHT:    code = SIM_KEY_RIGHT;                 break;
594
513
                                case SDLK_UP:       code = SIM_KEY_UP;                    break;
 
514
                                case SDLK_PAUSE:    code = 16;                            break;
595
515
 
596
516
                                default:
597
517
                                        if (event.key.keysym.unicode != 0) {
721
641
 
722
642
 
723
643
#ifdef _WIN32
724
 
BOOL APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR lpCmdLine, int /*nShowCmd*/)
 
644
int CALLBACK WinMain(HINSTANCE const hInstance, HINSTANCE, LPSTR, int)
725
645
#else
726
646
int main(int argc, char **argv)
727
647
#endif
728
648
{
729
649
#ifdef _WIN32
730
 
        char *argv[32], *p;
731
 
        int argc;
732
 
        char pathname[PATH_MAX];
733
 
 
734
 
        // prepare commandline
735
 
        argc = 0;
736
 
        GetModuleFileNameA( hInstance, pathname, 1024 );
737
 
        argv[argc++] = pathname;
738
 
        p = strtok(lpCmdLine, " ");
739
 
        while (p != NULL) {
740
 
                argv[argc++] = p;
741
 
                p = strtok(NULL, " ");
742
 
        }
743
 
        argv[argc] = NULL;
 
650
        int    const argc = __argc;
 
651
        char** const argv = __argv;
 
652
        char         pathname[1024];
 
653
        GetModuleFileNameA(hInstance, pathname, lengthof(pathname));
 
654
        argv[0] = pathname;
744
655
#elif !defined __BEOS__
745
656
#  if defined(__GLIBC__)  &&  !defined(__AMIGA__)
746
657
        /* glibc has a non-standard extension */