Get rid of PATH_MAX in Ghost System X11
[blender.git] / source / blender / blenlib / BLI_winstuff.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): none yet.
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27  
28 #ifndef __BLI_WINSTUFF_H__
29 #define __BLI_WINSTUFF_H__
30
31 /** \file BLI_winstuff.h
32  *  \ingroup bli
33  *  \brief Compatibility-like things for windows.
34  */
35
36 #ifndef _WIN32
37 #  error "This include is for Windows only!"
38 #endif
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 #ifdef _MSC_VER
98 #  define       R_OK    4
99 #  define       W_OK    2
100 // not accepted by access() on windows
101 //#  define     X_OK    1
102 #  define       F_OK    0
103 #endif
104
105 #ifndef FREE_WINDOWS
106 typedef unsigned int mode_t;
107 #endif
108
109 /* use functions that take a 64 bit offset for files larger than 4GB */
110 #ifndef FREE_WINDOWS
111 #  include <stdio.h>
112 #  define fseek(stream, offset, origin) _fseeki64(stream, offset, origin)
113 #  define ftell(stream) _ftelli64(stream)
114 #  define lseek(fd, offset, origin) _lseeki64(fd, offset, origin)
115 #  define tell(fd) _telli64(fd)
116 #endif
117
118 /* mingw using _SSIZE_T_ to declare ssize_t type */
119 #ifndef _SSIZE_T_
120 #  define _SSIZE_T_
121 /* python uses HAVE_SSIZE_T */
122 #  ifndef HAVE_SSIZE_T
123 #    define HAVE_SSIZE_T 1
124 #    ifndef FREE_WINDOWS64
125 typedef long ssize_t;
126 #    endif
127 #  endif
128 #endif
129
130 struct dirent {
131         int d_ino;
132         int d_off;
133         unsigned short d_reclen;
134         char *d_name;
135 };
136
137 typedef struct _DIR {
138         HANDLE handle;
139         WIN32_FIND_DATAW data;
140         char path[MAX_PATH];
141         long dd_loc;
142         long dd_size;
143         char dd_buf[4096];
144         void *dd_direct;
145         
146         struct dirent direntry;
147 } DIR;
148
149 void RegisterBlendExtension(void);
150 DIR *opendir(const char *path);
151 struct dirent *readdir(DIR *dp);
152 int closedir(DIR *dp);
153 void get_default_root(char *root);
154 int check_file_chars(char *filename);
155 const char *dirname(char *path);
156
157 int BLI_getInstallationDir(char *str);
158
159 #ifdef __cplusplus
160 }
161 #endif
162
163 #endif /* __BLI_WINSTUFF_H__ */
164