Initial revision
[blender.git] / source / blender / blenkernel / BKE_utildefines.h
1 /* util defines  -- might go away ?*/
2
3 /* 
4         $Id$
5
6  *
7  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
8  *
9  * This program is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU General Public License
11  * as published by the Free Software Foundation; either version 2
12  * of the License, or (at your option) any later version. The Blender
13  * Foundation also sells licenses for use in proprietary software under
14  * the Blender License.  See http://www.blender.org/BL/ for information
15  * about this.
16  *
17  * This program is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20  * GNU General Public License for more details.
21  *
22  * You should have received a copy of the GNU General Public License
23  * along with this program; if not, write to the Free Software Foundation,
24  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
25  *
26  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
27  * All rights reserved.
28  *
29  * The Original Code is: all of this file.
30  *
31  * Contributor(s): none yet.
32  *
33  * ***** END GPL/BL DUAL LICENSE BLOCK *****
34 */
35
36 #ifndef BKE_UTILDEFINES_H
37 #define BKE_UTILDEFINES_H
38
39 #ifndef FALSE
40 #define FALSE 0
41 #endif
42
43 #ifndef TRUE
44 #define TRUE 1
45 #endif
46
47 #define ELEM(a, b, c)           ( (a)==(b) || (a)==(c) )
48 #define ELEM3(a, b, c, d)       ( ELEM(a, b, c) || (a)==(d) )
49 #define ELEM4(a, b, c, d, e)    ( ELEM(a, b, c) || ELEM(a, d, e) )
50 #define ELEM5(a, b, c, d, e, f) ( ELEM(a, b, c) || ELEM3(a, d, e, f) )
51 #define ELEM6(a, b, c, d, e, f, g)      ( ELEM(a, b, c) || ELEM4(a, d, e, f, g) )
52 #define ELEM7(a, b, c, d, e, f, g, h)   ( ELEM3(a, b, c, d) || ELEM4(a, e, f, g, h) )
53 #define ELEM8(a, b, c, d, e, f, g, h, i)        ( ELEM4(a, b, c, d, e) || ELEM4(a, f, g, h, i) )
54
55         
56 /* string compare */
57 #define STREQ(str, a)           ( strcmp((str), (a))==0 )
58 #define STREQ2(str, a, b)       ( STREQ(str, a) || STREQ(str, b) )
59 #define STREQ3(str, a, b, c)    ( STREQ2(str, a, b) || STREQ(str, c) )
60
61 /* min/max */
62 #define MIN2(x,y)               ( (x)<(y) ? (x) : (y) )
63 #define MIN3(x,y,z)             MIN2( MIN2((x),(y)) , (z) )
64 #define MIN4(x,y,z,a)           MIN2( MIN2((x),(y)) , MIN2((z),(a)) )
65
66 #define MAX2(x,y)               ( (x)>(y) ? (x) : (y) )
67 #define MAX3(x,y,z)             MAX2( MAX2((x),(y)) , (z) )
68 #define MAX4(x,y,z,a)           MAX2( MAX2((x),(y)) , MAX2((z),(a)) )
69
70 #define SWAP(type, a, b)        { type sw_ap; sw_ap=(a); (a)=(b); (b)=sw_ap; }
71
72 #define ABS(a)                                  ( (a)<0 ? (-a) : (a) )
73
74 #define VECCOPY(v1,v2)          {*(v1)= *(v2); *(v1+1)= *(v2+1); *(v1+2)= *(v2+2);}
75 #define QUATCOPY(v1,v2)         {*(v1)= *(v2); *(v1+1)= *(v2+1); *(v1+2)= *(v2+2); *(v1+3)= *(v2+3);}
76
77 #define INIT_MINMAX(min, max) (min)[0]= (min)[1]= (min)[2]= 1.0e30; (max)[0]= (max)[1]= (max)[2]= -1.0e30;
78
79 #define DO_MINMAX(vec, min, max) if( (min)[0]>(vec)[0] ) (min)[0]= (vec)[0]; \
80                                                           if( (min)[1]>(vec)[1] ) (min)[1]= (vec)[1]; \
81                                                           if( (min)[2]>(vec)[2] ) (min)[2]= (vec)[2]; \
82                                                           if( (max)[0]<(vec)[0] ) (max)[0]= (vec)[0]; \
83                                                           if( (max)[1]<(vec)[1] ) (max)[1]= (vec)[1]; \
84                                                           if( (max)[2]<(vec)[2] ) (max)[2]= (vec)[2]; \
85
86 #define DO_MINMAX2(vec, min, max) if( (min)[0]>(vec)[0] ) (min)[0]= (vec)[0]; \
87                                                           if( (min)[1]>(vec)[1] ) (min)[1]= (vec)[1]; \
88                                                           if( (max)[0]<(vec)[0] ) (max)[0]= (vec)[0]; \
89                                                           if( (max)[1]<(vec)[1] ) (max)[1]= (vec)[1];
90
91
92 /* interferes elsewhere */
93 /* deze getallen ook invullen in blender.h SpaceFile: struct dna herkent geen defines */
94 #define FILE_MAXDIR                     160
95 #define FILE_MAXFILE            80
96
97
98 /* some misc stuff.... */
99 #define CLAMP(a, b, c)          if((a)<(b)) (a)=(b); else if((a)>(c)) (a)=(c)
100
101 #define KNOTSU(nu)        ( (nu)->orderu+ (nu)->pntsu+ (nu->orderu-1)*((nu)->flagu & 1) )
102 #define KNOTSV(nu)        ( (nu)->orderv+ (nu)->pntsv+ (nu->orderv-1)*((nu)->flagv & 1) )  
103
104 /* this weirdo pops up in two places ... */
105 #if !defined(WIN32) && !defined(__BeOS)
106 #define O_BINARY 0
107 #endif
108
109 /* INTEGER CODES */
110 #if defined(__sgi) || defined (__sparc) || defined (__PPC__) || defined (__ppc__) || defined (__BIG_ENDIAN__)
111         /* Big Endian */
112 #define MAKE_ID(a,b,c,d) ( (int)(a)<<24 | (int)(b)<<16 | (c)<<8 | (d) )
113 #else
114         /* Little Endian */
115 #define MAKE_ID(a,b,c,d) ( (int)(d)<<24 | (int)(c)<<16 | (b)<<8 | (a) )
116 #endif
117
118 #define ID_NEW(a)               if( (a) && (a)->id.newid ) (a)= (void *)(a)->id.newid
119
120 #define FORM MAKE_ID('F','O','R','M')
121 #define DDG1 MAKE_ID('3','D','G','1')
122 #define DDG2 MAKE_ID('3','D','G','2')
123 #define DDG3 MAKE_ID('3','D','G','3')
124 #define DDG4 MAKE_ID('3','D','G','4')
125
126 #define GOUR MAKE_ID('G','O','U','R')
127
128 #define BLEN MAKE_ID('B','L','E','N')
129 #define DER_ MAKE_ID('D','E','R','_')
130 #define V100 MAKE_ID('V','1','0','0')
131
132 #define DATA MAKE_ID('D','A','T','A')
133 #define GLOB MAKE_ID('G','L','O','B')
134 #define IMAG MAKE_ID('I','M','A','G')
135
136 #define DNA1 MAKE_ID('D','N','A','1')
137 #define TEST MAKE_ID('T','E','S','T')
138 #define REND MAKE_ID('R','E','N','D')
139 #define USER MAKE_ID('U','S','E','R')
140
141 #define ENDB MAKE_ID('E','N','D','B')
142
143 /* This should, of course, become a function */
144 #define DL_SURFINDEX(cyclu, cyclv, sizeu, sizev)            \
145                                                             \
146     if( (cyclv)==0 && a==(sizev)-1) break;                  \
147     if(cyclu) {                                             \
148         p1= sizeu*a;                                        \
149         p2= p1+ sizeu-1;                                    \
150         p3= p1+ sizeu;                                      \
151         p4= p2+ sizeu;                                      \
152         b= 0;                                               \
153     }                                                       \
154     else {                                                  \
155         p2= sizeu*a;                                        \
156         p1= p2+1;                                           \
157         p4= p2+ sizeu;                                      \
158         p3= p1+ sizeu;                                      \
159         b= 1;                                               \
160     }                                                       \
161     if( (cyclv) && a==sizev-1) {                            \
162         p3-= sizeu*sizev;                                   \
163         p4-= sizeu*sizev;                                   \
164     }
165
166 /* This one rotates the bytes in an int */
167 #define SWITCH_INT(a) { \
168     char s_i, *p_i; \
169     p_i= (char *)&(a); \
170     s_i=p_i[0]; p_i[0]=p_i[3]; p_i[3]=s_i; \
171     s_i=p_i[1]; p_i[1]=p_i[2]; p_i[2]=s_i; }
172
173 /* More brain damage. Only really used by packedFile.c  */
174 // return values
175 #define RET_OK 0
176 #define RET_ERROR 1
177 /* and these aren't used at all */
178 /*  #define RET_CANCEL 2 */
179 /*  #define RET_YES (1 == 1) */
180 /*  #define RET_NO (1 == 0) */
181
182 /* sequence related defines */
183 #define WHILE_SEQ(base) {                                                                                       \
184                                                         int totseq_, seq_; Sequence **seqar;    \
185                                                         build_seqar( base,  &seqar, &totseq_);  \
186                                                         for(seq_ = 0; seq_ < totseq_; seq_++) { \
187                                                                         seq= seqar[seq_];
188                                                                 
189
190 #define END_SEQ                                 }                                               \
191                                                         if(seqar) MEM_freeN(seqar);             \
192                                                         }
193
194
195 /* not really sure about these...  some kind of event codes ?*/ 
196 /* INFO: 300 */
197 /* pas op: ook in filesel.c en editobject.c */
198 #define B_INFOSCR               301
199 #define B_INFODELSCR    302
200 #define B_INFOSCE               304
201 #define B_INFODELSCE    305
202 #define B_FILEMENU              306
203 #define B_PACKFILE              307
204
205 /* From iff.h, but seemingly detached from anything else... To which
206  * encoding scheme do they belong? */
207 #define AMI         (1 << 31)
208 #define CDI         (1 << 30)
209 #define Anim    (1 << 29)
210 #define TGA         (1 << 28)
211 #define JPG             (1 << 27)
212 #define TIM         (1 << 26)
213
214 #define TIM_CLUT        (010)
215 #define TIM_4           (TIM | TIM_CLUT | 0)
216 #define TIM_8           (TIM | TIM_CLUT | 1)
217 #define TIM_16          (TIM | 2)
218 #define TIM_24          (TIM | 3)
219
220 #define RAWTGA  (TGA | 1)
221
222 #define JPG_STD (JPG | (0 << 8))
223 #define JPG_VID (JPG | (1 << 8))
224 #define JPG_JST (JPG | (2 << 8))
225 #define JPG_MAX (JPG | (3 << 8))
226 #define JPG_MSK (0xffffff00)
227
228 #define AM_ham      (0x0800 | AMI)
229 #define AM_hbrite   (0x0080 | AMI)
230 #define AM_lace     (0x0004 | AMI)
231 #define AM_hires    (0x8000 | AMI)
232 #define AM_hblace   (AM_hbrite | AM_lace)
233 #define AM_hilace   (AM_hires | AM_lace)
234 #define AM_hamlace  (AM_ham | AM_lace)
235
236 #define RGB888  1
237 #define RGB555  2
238 #define DYUV    3
239 #define CLUT8   4
240 #define CLUT7   5
241 #define CLUT4   6
242 #define CLUT3   7
243 #define RL7     8
244 #define RL3     9
245 #define MPLTE   10
246
247 #define DYUV1   0
248 #define DYUVE   1
249
250 #define CD_rgb8         (RGB888 | CDI)
251 #define CD_rgb5         (RGB555 | CDI)
252 #define CD_dyuv         (DYUV | CDI)
253 #define CD_clut8        (CLUT8 | CDI)
254 #define CD_clut7        (CLUT7 | CDI)
255 #define CD_clut4        (CLUT4 | CDI)
256 #define CD_clut3        (CLUT3 | CDI)
257 #define CD_rl7          (RL7 | CDI)
258 #define CD_rl3          (RL3 | CDI)
259 #define CD_mplte        (MPLTE | CDI)
260
261 #define C233    1
262 #define YUVX    2
263 #define HAMX    3
264 #define TANX    4
265
266 #define AN_c233                 (Anim | C233)
267 #define AN_yuvx                 (Anim | YUVX)
268 #define AN_hamx                 (Anim | HAMX)
269 #define AN_tanx                 (Anim | TANX)
270
271 #define IMAGIC  0732
272
273 /* This used to reside in render.h. It does some texturing. */
274 #define BRICON          Tin= (Tin-0.5)*tex->contrast+tex->bright-0.5; \
275                                         if(Tin<0.0) Tin= 0.0; else if(Tin>1.0) Tin= 1.0;
276
277 #define BRICONRGB       Tr= tex->rfac*((Tr-0.5)*tex->contrast+tex->bright-0.5); \
278                                         if(Tr<0.0) Tr= 0.0; else if(Tr>1.0) Tr= 1.0; \
279                                         Tg= tex->gfac*((Tg-0.5)*tex->contrast+tex->bright-0.5); \
280                                         if(Tg<0.0) Tg= 0.0; else if(Tg>1.0) Tg= 1.0; \
281                                         Tb= tex->bfac*((Tb-0.5)*tex->contrast+tex->bright-0.5); \
282                                         if(Tb<0.0) Tb= 0.0; else if(Tb>1.0) Tb= 1.0;
283
284 /* mystifying stuff from blendef... */
285 #define SELECT                  1
286 #define ACTIVE                  2
287 #define NOT_YET                 0
288
289 /* ???? */
290 #define BTST(a,b)     ( ( (a) & 1<<(b) )!=0 )   
291 #define BSET(a,b)     ( (a) | 1<<(b) )
292
293 /* needed for material.c*/
294 #define REDRAWBUTSMAT         0x4015
295
296 /* useless game shit */
297 #define MA_FH_NOR       2
298
299
300 #endif