Change to the linux kernel coding style
[wmaker-crm.git] / plugins / libwmfun / generic.c
1 /*
2  *  libwmfun - WindowMaker texture function library
3  *  Copyright (C) 1999 Tobias Gloth
4  * 
5  *  This program is free software; you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation; either version 2 of the License, or
8  *  (at your option) any later version.
9  *
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU General Public License for more details.
14  *
15  *  You should have received a copy of the GNU General Public License
16  *  along with this program; if not, write to the Free Software
17  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 
18  *  USA.
19  */
20
21 /*
22  * $Id$
23  *
24  * $Log$
25  * Revision 1.1  2000/12/03 18:58:41  id
26  * initiate plugins branch
27  *
28  * Revision 1.1.1.1  1999/02/21 17:16:47  gloth
29  * initial revision
30  *
31  */
32
33 #include <stdarg.h>
34 #include <stdio.h>
35 #include <stdlib.h>
36
37 #include "generic.h"
38
39 static Display *dpy = 0;
40 static Colormap cmap;
41
42 void initWindowMaker(Display * d, Colormap c)
43 {
44         if (!d) {
45                 return;
46         }
47         dpy = d;
48         cmap = c;
49 }
50
51 void error(const char *format, ...)
52 {
53         va_list args;
54         va_start(args, format);
55         vfprintf(stderr, format, args);
56         va_end(args);
57 }
58
59 int parse_color(const char *string, int *result)
60 {
61         XColor color;
62
63         if (!XParseColor(dpy, cmap, string, &color)) {
64                 return 0;
65         }
66         result[0] = color.red >> 8;
67         result[1] = color.green >> 8;
68         result[2] = color.blue >> 8;
69
70         return 1;
71 }
72
73 int parse_xcolor(const char *string, XColor * xcolor)
74 {
75         if (!XParseColor(dpy, cmap, string, xcolor)) {
76                 return 0;
77         }
78         if (!XAllocColor(dpy, cmap, xcolor)) {
79                 return 0;
80         }
81
82         return 1;
83 }
84
85 void interpolate_color(int *t, const int *s0, const int *s1, int mix)
86 {
87         t[0] = (mix * s0[0] + (255 - mix) * s1[0]) >> 8;
88         t[1] = (mix * s0[1] + (255 - mix) * s1[1]) >> 8;
89         t[2] = (mix * s0[2] + (255 - mix) * s1[2]) >> 8;
90 }
91
92 int random_int(int range)
93 {
94         return rand() / (RAND_MAX / range + 1);
95 }
96
97 double random_double(double range)
98 {
99         return ((double)rand()) / (((double)RAND_MAX) / range);
100 }
101
102 int start_image(const char *name, int argc, int argc_min, int argc_max, int width, int height, RImage ** image)
103 {
104
105         if (!dpy) {
106                 error("%s: library not initialized\n", name);
107                 return 0;
108         }
109
110         if ((argc < argc_min) || (argc >= argc_max)) {
111                 error("%s: invalid number of parameters: \n", name, argc);
112                 return 0;
113         }
114
115         *image = RCreateImage(width, height, 0);
116         if (!*image) {
117                 error("%s: can't create image\n", name);
118                 return 0;
119         }
120         return 1;
121 }