Merged changes in the trunk up to revision 32886.
[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 #undef HKEY
45 #define HKEY WIN32_HKEY                         // prevent competing definitions
46 #include <windows.h>
47 #undef HKEY
48 #else
49 #include <windows.h>
50 #endif
51
52 #undef near
53 #undef far
54 #undef rad
55 #undef rad1
56 #undef rad2
57 #undef rad3
58 #undef vec
59 #undef rect
60 #undef rct1
61 #undef rct2
62
63 #define near clipsta
64 #define far clipend
65
66 #undef small
67
68 // These definitions are also in arithb for simplicity
69
70 #ifdef __cplusplus
71 extern "C" {
72 #endif
73
74 #define _USE_MATH_DEFINES
75 #define MAXPATHLEN MAX_PATH
76
77 #ifndef S_ISREG
78 #define S_ISREG(x) (((x)&_S_IFREG) == _S_IFREG)
79 #endif
80 #ifndef S_ISDIR
81 #define S_ISDIR(x) (((x)&_S_IFDIR) == _S_IFDIR)
82 #endif
83
84 /* defines for using ISO C++ conformant names */
85 #define open _open
86 #define close _close
87 #define write _write
88 #define read _read
89 #define getcwd _getcwd
90 #define chdir _chdir
91 #define strdup _strdup
92 #define lseek _lseek
93 #define getpid _getpid
94 #define snprintf _snprintf
95
96 #ifndef FREE_WINDOWS
97 typedef unsigned int mode_t;
98 #endif
99
100 /* mingw using _SSIZE_T_ to declare ssize_t type */
101 #ifndef _SSIZE_T_
102 #define _SSIZE_T_
103 /* python uses HAVE_SSIZE_T */
104 #ifndef HAVE_SSIZE_T
105 #define HAVE_SSIZE_T 1
106 typedef long ssize_t;
107 #endif
108 #endif
109
110 struct dirent {
111         int d_ino;
112         int d_off;
113         unsigned short d_reclen;
114         char *d_name;
115 };
116
117 typedef struct _DIR {
118         HANDLE handle;
119         WIN32_FIND_DATA data;
120         char path[MAX_PATH];
121         long dd_loc;
122         long dd_size;
123         char dd_buf[4096];
124         void *dd_direct;
125         
126         struct dirent direntry;
127 } DIR;
128
129 void RegisterBlendExtension(char * str);
130 DIR *opendir (const char *path);
131 struct dirent *readdir(DIR *dp);
132 int closedir (DIR *dp);
133 void get_default_root(char *root);
134 int check_file_chars(char *filename);
135 char *dirname(char *path);
136
137 #ifdef WIN32
138 int BLI_getInstallationDir(char *str);
139 #endif
140
141 #ifdef __cplusplus
142 }
143 #endif
144
145 #endif
146
147 #endif /* __WINSTUFF_H__ */
148