Fix #27877: writing .avi files > 4 GB not working on windows.
[blender.git] / source / blender / blenlib / BLI_winstuff.h
1 /*
2  * $Id$ 
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): none yet.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  */
29  
30 #ifndef __WINSTUFF_H__
31 #define __WINSTUFF_H__
32
33 /** \file BLI_winstuff.h
34  *  \ingroup bli
35  *  \brief Compatibility-like things for windows.
36  */
37
38 #ifdef _WIN32
39
40 #ifndef FREE_WINDOWS
41 #pragma warning(once: 4761 4305 4244 4018)
42 #else
43 #ifdef WINVER
44 #undef WINVER
45 #endif
46
47 /* Some stuff requires WINVER 0x500, but mingw's default is 0x400 */
48 #define WINVER 0x0501
49 #endif
50
51 #define WIN32_LEAN_AND_MEAN
52
53 #ifndef WIN32_SKIP_HKEY_PROTECTION
54 #undef HKEY
55 #define HKEY WIN32_HKEY                         // prevent competing definitions
56 #include <windows.h>
57 #undef HKEY
58 #else
59 #include <windows.h>
60 #endif
61
62 #undef near
63 #undef far
64 #undef rad
65 #undef rad1
66 #undef rad2
67 #undef rad3
68 #undef vec
69 #undef rect
70 #undef rct1
71 #undef rct2
72
73 #define near clipsta
74 #define far clipend
75
76 #undef small
77
78 // These definitions are also in BLI_math for simplicity
79
80 #ifdef __cplusplus
81 extern "C" {
82 #endif
83
84 #define _USE_MATH_DEFINES
85 #define MAXPATHLEN MAX_PATH
86
87 #ifndef S_ISREG
88 #define S_ISREG(x) (((x)&_S_IFREG) == _S_IFREG)
89 #endif
90 #ifndef S_ISDIR
91 #define S_ISDIR(x) (((x)&_S_IFDIR) == _S_IFDIR)
92 #endif
93
94 /* defines for using ISO C++ conformant names */
95 #define snprintf _snprintf
96
97 #ifndef FREE_WINDOWS
98 typedef unsigned int mode_t;
99 #endif
100
101 /* use functions that take a 64 bit offset for files larger than 4GB */
102 #ifndef FREE_WINDOWS
103 #include <stdio.h>
104 #define fseek(stream, offset, origin) _fseeki64(stream, offset, origin)
105 #define ftell(stream) _ftelli64(stream)
106 #define lseek(fd, offset, origin) _lseeki64(fd, offset, origin)
107 #define tell(fd) _telli64(fd)
108 #endif
109
110 /* mingw using _SSIZE_T_ to declare ssize_t type */
111 #ifndef _SSIZE_T_
112 #define _SSIZE_T_
113 /* python uses HAVE_SSIZE_T */
114 #ifndef HAVE_SSIZE_T
115 #define HAVE_SSIZE_T 1
116 typedef long ssize_t;
117 #endif
118 #endif
119
120 struct dirent {
121         int d_ino;
122         int d_off;
123         unsigned short d_reclen;
124         char *d_name;
125 };
126
127 typedef struct _DIR {
128         HANDLE handle;
129         WIN32_FIND_DATA data;
130         char path[MAX_PATH];
131         long dd_loc;
132         long dd_size;
133         char dd_buf[4096];
134         void *dd_direct;
135         
136         struct dirent direntry;
137 } DIR;
138
139 void RegisterBlendExtension(void);
140 DIR *opendir (const char *path);
141 struct dirent *readdir(DIR *dp);
142 int closedir (DIR *dp);
143 void get_default_root(char *root);
144 int check_file_chars(char *filename);
145 char *dirname(char *path);
146
147 int BLI_getInstallationDir(char *str);
148
149 #ifdef __cplusplus
150 }
151 #endif
152
153 #endif /* _WIN32 */
154
155 #endif /* __WINSTUFF_H__ */
156