synched with trunk at revision 34793
[blender.git] / source / blender / blenlib / BLI_winstuff.h
1 /**
2  * Compatibility-like things for windows.
3  *
4  * $Id$ 
5  *
6  * ***** BEGIN GPL LICENSE BLOCK *****
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * The Original Code is: all of this file.
26  *
27  * Contributor(s): none yet.
28  *
29  * ***** END GPL LICENSE BLOCK *****
30  */
31  
32 #ifndef __WINSTUFF_H__
33 #define __WINSTUFF_H__
34
35 #ifdef _WIN32
36
37 #ifndef FREE_WINDOWS
38 #pragma warning(once: 4761 4305 4244 4018)
39 #endif
40
41 #define WIN32_LEAN_AND_MEAN
42
43 #ifndef WIN32_SKIP_HKEY_PROTECTION
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 arithb 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 #define open _open
85 #define close _close
86 #define write _write
87 #define read _read
88 #define getcwd _getcwd
89 #define chdir _chdir
90 #define strdup _strdup
91 #define lseek _lseek
92 #define getpid _getpid
93 #define snprintf _snprintf
94
95 #ifndef FREE_WINDOWS
96 typedef unsigned int mode_t;
97 #endif
98
99 /* mingw using _SSIZE_T_ to declare ssize_t type */
100 #ifndef _SSIZE_T_
101 #define _SSIZE_T_
102 /* python uses HAVE_SSIZE_T */
103 #ifndef HAVE_SSIZE_T
104 #define HAVE_SSIZE_T 1
105 typedef long ssize_t;
106 #endif
107 #endif
108
109 struct dirent {
110         int d_ino;
111         int d_off;
112         unsigned short d_reclen;
113         char *d_name;
114 };
115
116 typedef struct _DIR {
117         HANDLE handle;
118         WIN32_FIND_DATA data;
119         char path[MAX_PATH];
120         long dd_loc;
121         long dd_size;
122         char dd_buf[4096];
123         void *dd_direct;
124         
125         struct dirent direntry;
126 } DIR;
127
128 void RegisterBlendExtension(char * str);
129 DIR *opendir (const char *path);
130 struct dirent *readdir(DIR *dp);
131 int closedir (DIR *dp);
132 void get_default_root(char *root);
133 int check_file_chars(char *filename);
134 char *dirname(char *path);
135
136 #ifdef WIN32
137 int BLI_getInstallationDir(char *str);
138 #endif
139
140 #ifdef __cplusplus
141 }
142 #endif
143
144 #endif
145
146 #endif /* __WINSTUFF_H__ */
147