Merge branch 'blender2.8' into soc-2018-bevel
[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 #define WIN32_LEAN_AND_MEAN
41
42 #ifndef WIN32_SKIP_HKEY_PROTECTION
43 #  undef HKEY
44 #  define HKEY WIN32_HKEY  /* prevent competing definitions */
45 #  include <windows.h>
46 #  undef HKEY
47 #else
48 #  include <windows.h>
49 #endif
50
51 #undef near
52 #undef far
53 #undef rad
54 #undef rad1
55 #undef rad2
56 #undef rad3
57 #undef vec
58 #undef rect
59 #undef rct1
60 #undef rct2
61
62 #define near clipsta
63 #define far clipend
64
65 #undef small
66
67 // These definitions are also in BLI_math for simplicity
68
69 #ifdef __cplusplus
70 extern "C" {
71 #endif
72
73 #define _USE_MATH_DEFINES
74 #define MAXPATHLEN MAX_PATH
75
76 #ifndef S_ISREG
77 #  define S_ISREG(x) (((x) & _S_IFREG) == _S_IFREG)
78 #endif
79 #ifndef S_ISDIR
80 #  define S_ISDIR(x) (((x) & _S_IFDIR) == _S_IFDIR)
81 #endif
82
83 /* defines for using ISO C++ conformant names */
84 #if !defined(_MSC_VER) || _MSC_VER < 1900
85 #  define snprintf _snprintf
86 #endif
87
88 #if defined(_MSC_VER)
89 #  define       R_OK    4
90 #  define       W_OK    2
91 // not accepted by access() on windows
92 //#  define     X_OK    1
93 #  define       F_OK    0
94 #endif
95
96 typedef unsigned int mode_t;
97
98 /* use functions that take a 64 bit offset for files larger than 4GB */
99 #include <stdio.h>
100 #define fseek(stream, offset, origin) _fseeki64(stream, offset, origin)
101 #define ftell(stream) _ftelli64(stream)
102 #define lseek(fd, offset, origin) _lseeki64(fd, offset, origin)
103 #define tell(fd) _telli64(fd)
104
105
106 #ifndef _SSIZE_T_
107 #  define _SSIZE_T_
108 /* python uses HAVE_SSIZE_T */
109 #  ifndef HAVE_SSIZE_T
110 #    define HAVE_SSIZE_T 1
111 typedef long ssize_t;
112 #  endif
113 #endif
114
115 struct dirent {
116         int d_ino;
117         int d_off;
118         unsigned short d_reclen;
119         char *d_name;
120 };
121
122 /* intentionally opaque to users */
123 typedef struct __dirstream DIR;
124
125 DIR *opendir(const char *path);
126 struct dirent *readdir(DIR *dp);
127 int closedir(DIR *dp);
128
129 void RegisterBlendExtension(void);
130 void get_default_root(char *root);
131 int check_file_chars(char *filename);
132 const char *dirname(char *path);
133
134 int BLI_getInstallationDir(char *str);
135
136 #ifdef __cplusplus
137 }
138 #endif
139
140 #endif /* __BLI_WINSTUFF_H__ */