Mercurial > audlegacy-plugins
annotate src/paranormal/general.c @ 1892:3b034150d31e
Add GPL2 boilerplate text.
author | William Pitcock <nenolod@atheme.org> |
---|---|
date | Wed, 26 Sep 2007 11:51:08 -0500 |
parents | a7c98f237b03 |
children | 56bb18dd3fdd |
rev | line source |
---|---|
1892
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
1177
diff
changeset
|
1 /* |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
1177
diff
changeset
|
2 * paranormal: iterated pipeline-driven visualization plugin |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
1177
diff
changeset
|
3 * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org> |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
1177
diff
changeset
|
4 * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com> |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
1177
diff
changeset
|
5 * |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
1177
diff
changeset
|
6 * This program is free software; you can redistribute it and/or modify |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
1177
diff
changeset
|
7 * it under the terms of the GNU General Public License as published by |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
1177
diff
changeset
|
8 * the Free Software Foundation; under version 2 of the License. |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
1177
diff
changeset
|
9 * |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
1177
diff
changeset
|
10 * This program is distributed in the hope that it will be useful, |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
1177
diff
changeset
|
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
1177
diff
changeset
|
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
1177
diff
changeset
|
13 * GNU General Public License for more details. |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
1177
diff
changeset
|
14 * |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
1177
diff
changeset
|
15 * You should have received a copy of the GNU General Public License |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
1177
diff
changeset
|
16 * along with this program; if not, write to the Free Software |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
1177
diff
changeset
|
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
1177
diff
changeset
|
18 */ |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
1177
diff
changeset
|
19 |
149
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
20 /* FIXME: what to name this file? */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
21 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
22 #ifdef HAVE_CONFIG_H |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
23 # include <config.h> |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
24 #endif |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
25 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
26 #include "paranormal.h" |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
27 #include "actuators.h" |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
28 #include "pn_utils.h" |
1177
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
29 #include "libcalc/calc.h" |
149
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
30 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
31 /* **************** general_fade **************** */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
32 static struct pn_actuator_option_desc general_fade_opts[] = |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
33 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
34 { "amount", "The amount by which the color index of each " |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
35 "pixel should be decreased by each frame (MAX 255)", |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
36 OPT_TYPE_INT, { ival: 3 } }, |
175 | 37 { NULL } |
149
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
38 }; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
39 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
40 static void |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
41 general_fade_exec (const struct pn_actuator_option *opts, |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
42 gpointer data) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
43 { |
177 | 44 int amt = opts[0].val.ival > 255 || opts[0].val.ival < 0 ? 3 : opts[0].val.ival; |
149
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
45 int i, j; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
46 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
47 for (j=0; j<pn_image_data->height; j++) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
48 for (i=0; i<pn_image_data->width; i++) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
49 pn_image_data->surface[0][PN_IMG_INDEX (i, j)] = |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
50 CAPLO (pn_image_data->surface[0][PN_IMG_INDEX (i, j)] |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
51 - amt, 0); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
52 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
53 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
54 struct pn_actuator_desc builtin_general_fade = |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
55 { |
155
adf9f4b26039
[svn] - user-friendly names (UI side unimplemented still)
nenolod
parents:
149
diff
changeset
|
56 "general_fade", "Fade-out", "Decreases the color index of each pixel", |
149
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
57 0, general_fade_opts, |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
58 NULL, NULL, general_fade_exec |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
59 }; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
60 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
61 /* **************** general_blur **************** */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
62 /* FIXME: add a variable radius */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
63 /* FIXME: SPEEEED */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
64 static void |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
65 general_blur_exec (const struct pn_actuator_option *opts, |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
66 gpointer data) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
67 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
68 int i,j; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
69 register guchar *srcptr = pn_image_data->surface[0]; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
70 register guchar *destptr = pn_image_data->surface[1]; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
71 register int sum; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
72 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
73 for (j=0; j<pn_image_data->height; j++) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
74 for (i=0; i<pn_image_data->width; i++) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
75 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
76 sum = *(srcptr)<<2; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
77 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
78 /* top */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
79 if (j > 0) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
80 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
81 sum += *(srcptr-pn_image_data->width)<<1; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
82 if (i > 0) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
83 sum += *(srcptr-pn_image_data->width-1); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
84 if (i < pn_image_data->width-1) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
85 sum += *(srcptr-pn_image_data->width+1); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
86 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
87 /* bottom */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
88 if (j < pn_image_data->height-1) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
89 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
90 sum += *(srcptr+pn_image_data->width)<<1; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
91 if (i > 0) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
92 sum += *(srcptr+pn_image_data->width-1); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
93 if (i < pn_image_data->width-1) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
94 sum += *(srcptr+pn_image_data->width+1); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
95 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
96 /* left */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
97 if (i > 0) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
98 sum += *(srcptr-1)<<1; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
99 /* right */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
100 if (i < pn_image_data->width-1) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
101 sum += *(srcptr+1)<<1; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
102 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
103 *destptr++ = (guchar)(sum >> 4); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
104 srcptr++; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
105 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
106 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
107 pn_swap_surfaces (); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
108 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
109 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
110 struct pn_actuator_desc builtin_general_blur = |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
111 { |
155
adf9f4b26039
[svn] - user-friendly names (UI side unimplemented still)
nenolod
parents:
149
diff
changeset
|
112 "general_blur", "Blur", "A simple 1 pixel radius blur", |
149
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
113 0, NULL, |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
114 NULL, NULL, general_blur_exec |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
115 }; |
174
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
116 |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
117 /* **************** general_mosaic **************** */ |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
118 /* FIXME: add a variable radius */ |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
119 /* FIXME: SPEEEED */ |
175 | 120 static struct pn_actuator_option_desc general_mosaic_opts[] = |
121 { | |
122 { "radius", "The pixel radius that should be used for the effect.", | |
123 OPT_TYPE_INT, { ival: 6 } }, | |
124 { NULL } | |
125 }; | |
126 | |
174
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
127 static void |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
128 general_mosaic_exec (const struct pn_actuator_option *opts, |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
129 gpointer data) |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
130 { |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
131 int i,j; |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
132 register guchar *srcptr = pn_image_data->surface[0]; |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
133 register guchar *destptr = pn_image_data->surface[1]; |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
134 register int sum; |
177 | 135 int radius = opts[0].val.ival > 255 || opts[0].val.ival < 0 ? 6 : opts[0].val.ival; |
174
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
136 |
175 | 137 for (j=0; j<pn_image_data->height; j += radius) |
138 for (i=0; i<pn_image_data->width; i += radius) | |
174
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
139 { |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
140 int ii = 0, jj = 0; |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
141 guchar bval = 0; |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
142 |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
143 /* find the brightest colour */ |
175 | 144 for (jj = 0; jj < radius && (j + jj < pn_image_data->height); jj++) |
145 for (ii = 0; ii < radius && (i + ii < pn_image_data->width); ii++) | |
174
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
146 { |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
147 guchar val = srcptr[PN_IMG_INDEX(i + ii, j + jj)]; |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
148 |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
149 if (val > bval) |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
150 bval = val; |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
151 } |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
152 |
175 | 153 for (jj = 0; jj < radius && (j + jj < pn_image_data->height); jj++) |
154 for (ii = 0; ii < radius && (i + ii < pn_image_data->width); ii++) | |
174
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
155 { |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
156 destptr[PN_IMG_INDEX(i + ii, j + jj)] = bval; |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
157 } |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
158 } |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
159 |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
160 pn_swap_surfaces (); |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
161 } |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
162 |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
163 struct pn_actuator_desc builtin_general_mosaic = |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
164 { |
176 | 165 "general_mosaic", "Mosaic", "A simple mosaic effect.", |
175 | 166 0, general_mosaic_opts, |
174
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
167 NULL, NULL, general_mosaic_exec |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
168 }; |
177 | 169 |
170 /* **************** general_clear **************** */ | |
171 static void | |
172 general_clear_exec (const struct pn_actuator_option *opts, | |
173 gpointer data) | |
174 { | |
175 memset(pn_image_data->surface[0], '\0', | |
176 (pn_image_data->height * pn_image_data->width)); | |
177 } | |
178 | |
179 struct pn_actuator_desc builtin_general_clear = | |
180 { | |
181 "general_clear", "Clear Surface", "Clears the surface.", | |
182 0, NULL, | |
183 NULL, NULL, general_clear_exec | |
184 }; | |
185 | |
179
b44ab11a64c2
[svn] - NOOP instruction. What this does is basically takes a slot in a
nenolod
parents:
177
diff
changeset
|
186 /* **************** general_noop **************** */ |
b44ab11a64c2
[svn] - NOOP instruction. What this does is basically takes a slot in a
nenolod
parents:
177
diff
changeset
|
187 static void |
b44ab11a64c2
[svn] - NOOP instruction. What this does is basically takes a slot in a
nenolod
parents:
177
diff
changeset
|
188 general_noop_exec (const struct pn_actuator_option *opts, |
b44ab11a64c2
[svn] - NOOP instruction. What this does is basically takes a slot in a
nenolod
parents:
177
diff
changeset
|
189 gpointer data) |
b44ab11a64c2
[svn] - NOOP instruction. What this does is basically takes a slot in a
nenolod
parents:
177
diff
changeset
|
190 { |
b44ab11a64c2
[svn] - NOOP instruction. What this does is basically takes a slot in a
nenolod
parents:
177
diff
changeset
|
191 return; |
b44ab11a64c2
[svn] - NOOP instruction. What this does is basically takes a slot in a
nenolod
parents:
177
diff
changeset
|
192 } |
b44ab11a64c2
[svn] - NOOP instruction. What this does is basically takes a slot in a
nenolod
parents:
177
diff
changeset
|
193 |
b44ab11a64c2
[svn] - NOOP instruction. What this does is basically takes a slot in a
nenolod
parents:
177
diff
changeset
|
194 struct pn_actuator_desc builtin_general_noop = |
b44ab11a64c2
[svn] - NOOP instruction. What this does is basically takes a slot in a
nenolod
parents:
177
diff
changeset
|
195 { |
b44ab11a64c2
[svn] - NOOP instruction. What this does is basically takes a slot in a
nenolod
parents:
177
diff
changeset
|
196 "general_noop", "Do Nothing", "Does absolutely nothing.", |
b44ab11a64c2
[svn] - NOOP instruction. What this does is basically takes a slot in a
nenolod
parents:
177
diff
changeset
|
197 0, NULL, |
b44ab11a64c2
[svn] - NOOP instruction. What this does is basically takes a slot in a
nenolod
parents:
177
diff
changeset
|
198 NULL, NULL, general_noop_exec |
b44ab11a64c2
[svn] - NOOP instruction. What this does is basically takes a slot in a
nenolod
parents:
177
diff
changeset
|
199 }; |
b44ab11a64c2
[svn] - NOOP instruction. What this does is basically takes a slot in a
nenolod
parents:
177
diff
changeset
|
200 |
181 | 201 /* **************** general_invert **************** */ |
202 static void | |
203 general_invert_exec (const struct pn_actuator_option *opts, | |
204 gpointer data) | |
205 { | |
206 int i, j; | |
207 | |
208 for (j=0; j < pn_image_data->height; j++) | |
209 for (i=0; i < pn_image_data->width; i++) | |
210 pn_image_data->surface[0][PN_IMG_INDEX (i, j)] = | |
211 255 - pn_image_data->surface[0][PN_IMG_INDEX (i, j)]; | |
212 } | |
213 | |
214 struct pn_actuator_desc builtin_general_invert = | |
215 { | |
216 "general_invert", "Value Invert", "Performs a value invert.", | |
217 0, NULL, | |
218 NULL, NULL, general_invert_exec | |
219 }; | |
220 | |
182
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
221 /* **************** general_replace **************** */ |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
222 static struct pn_actuator_option_desc general_replace_opts[] = |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
223 { |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
224 { "start", "The beginning colour value that should be replaced by the value of out.", |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
225 OPT_TYPE_INT, { ival: 250 } }, |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
226 { "end", "The ending colour value that should be replaced by the value of out.", |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
227 OPT_TYPE_INT, { ival: 255 } }, |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
228 { "out", "The colour value that in is replaced with.", |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
229 OPT_TYPE_INT, { ival: 0 } }, |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
230 { NULL } |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
231 }; |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
232 |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
233 static void |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
234 general_replace_exec (const struct pn_actuator_option *opts, |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
235 gpointer data) |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
236 { |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
237 register int i, j; |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
238 register guchar val; |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
239 guchar begin = opts[0].val.ival > 255 || opts[0].val.ival < 0 ? 250 : opts[0].val.ival; |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
240 guchar end = opts[1].val.ival > 255 || opts[1].val.ival < 0 ? 255 : opts[1].val.ival; |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
241 guchar out = opts[2].val.ival > 255 || opts[2].val.ival < 0 ? 0 : opts[2].val.ival; |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
242 |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
243 for (j=0; j < pn_image_data->height; j++) |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
244 for (i=0; i < pn_image_data->width; i++) |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
245 { |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
246 val = pn_image_data->surface[0][PN_IMG_INDEX (i, j)]; |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
247 if (val >= begin && val <= end) |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
248 pn_image_data->surface[0][PN_IMG_INDEX (i, j)] = out; |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
249 } |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
250 } |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
251 |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
252 struct pn_actuator_desc builtin_general_replace = |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
253 { |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
254 "general_replace", "Value Replace", "Performs a value replace on a range of values.", |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
255 0, general_replace_opts, |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
256 NULL, NULL, general_replace_exec |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
257 }; |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
258 |
271 | 259 /* **************** general_swap **************** */ |
260 static void | |
261 general_swap_exec (const struct pn_actuator_option *opts, | |
262 gpointer data) | |
263 { | |
264 pn_swap_surfaces (); | |
265 } | |
266 | |
267 struct pn_actuator_desc builtin_general_swap = | |
268 { | |
269 "general_swap", "Swap Surface", "Swaps the surface.", | |
270 0, NULL, | |
271 NULL, NULL, general_swap_exec | |
272 }; | |
272 | 273 |
274 /* **************** general_copy **************** */ | |
275 static void | |
276 general_copy_exec (const struct pn_actuator_option *opts, | |
277 gpointer data) | |
278 { | |
279 memcpy(pn_image_data->surface[1], pn_image_data->surface[0], | |
280 (pn_image_data->width * pn_image_data->height)); | |
281 } | |
282 | |
283 struct pn_actuator_desc builtin_general_copy = | |
284 { | |
285 "general_copy", "Copy Surface", "Copies the surface to the other surface.", | |
286 0, NULL, | |
287 NULL, NULL, general_copy_exec | |
288 }; | |
278 | 289 |
290 /* **************** general_flip **************** */ | |
291 static struct pn_actuator_option_desc general_flip_opts[] = | |
292 { | |
293 { "direction", "Negative is horizontal, positive is vertical.", | |
294 OPT_TYPE_INT, { ival: -1 } }, | |
295 { NULL } | |
296 }; | |
297 | |
298 static void | |
299 general_flip_exec (const struct pn_actuator_option *opts, | |
300 gpointer data) | |
301 { | |
302 gint x, y; | |
303 | |
304 if (opts[0].val.ival < 0) | |
305 { | |
306 for (y = 0; y < pn_image_data->height; y++) | |
307 for (x = 0; x < pn_image_data->width; x++) | |
308 { | |
309 pn_image_data->surface[1][PN_IMG_INDEX(pn_image_data->width - x, y)] = | |
310 pn_image_data->surface[0][PN_IMG_INDEX(x, y)]; | |
311 } | |
312 } | |
313 else | |
314 { | |
315 for (y = 0; y < pn_image_data->height; y++) | |
316 for (x = 0; x < pn_image_data->width; x++) | |
317 { | |
318 pn_image_data->surface[1][PN_IMG_INDEX(x, pn_image_data->height - y)] = | |
319 pn_image_data->surface[0][PN_IMG_INDEX(x, y)]; | |
320 } | |
321 } | |
322 | |
323 pn_swap_surfaces (); | |
324 } | |
325 | |
326 struct pn_actuator_desc builtin_general_flip = | |
327 { | |
328 "general_flip", "Flip Surface", "Flips the surface.", | |
329 0, general_flip_opts, | |
330 NULL, NULL, general_flip_exec | |
331 }; | |
1177
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
332 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
333 /* ***************** general_evaluate ***************** */ |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
334 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
335 static struct pn_actuator_option_desc general_evaluate_opts[] = |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
336 { |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
337 { "init_script", "Script to run on start.", OPT_TYPE_STRING, {sval: "global_reg0 = 27;"} }, |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
338 { "frame_script", "Script to run.", OPT_TYPE_STRING, {sval: "global_reg0 = global_reg0 + 1;"} }, |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
339 { NULL } |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
340 }; |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
341 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
342 struct pn_evaluate_ctx |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
343 { |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
344 expression_t *expr_on_init, *expr_on_frame; |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
345 symbol_dict_t *dict; |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
346 gboolean reset; |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
347 }; |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
348 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
349 static void |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
350 general_evaluate_init(gpointer *data) |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
351 { |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
352 *data = g_new0(struct pn_evaluate_ctx, 1); |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
353 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
354 ((struct pn_evaluate_ctx *)*data)->reset = TRUE; |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
355 } |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
356 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
357 static void |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
358 general_evaluate_cleanup(gpointer op_data) |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
359 { |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
360 struct pn_evaluate_ctx *data = (struct pn_evaluate_ctx *) op_data; |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
361 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
362 g_return_if_fail(data != NULL); |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
363 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
364 if (data->expr_on_init) |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
365 expr_free(data->expr_on_init); |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
366 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
367 if (data->expr_on_frame) |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
368 expr_free(data->expr_on_frame); |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
369 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
370 if (data->dict) |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
371 dict_free(data->dict); |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
372 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
373 if (data) |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
374 g_free(data); |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
375 } |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
376 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
377 static void |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
378 general_evaluate_exec(const struct pn_actuator_option *opts, |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
379 gpointer op_data) |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
380 { |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
381 struct pn_evaluate_ctx *data = (struct pn_evaluate_ctx *) op_data; |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
382 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
383 if (data->reset) |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
384 { |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
385 if (data->dict) |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
386 dict_free(data->dict); |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
387 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
388 data->dict = dict_new(); |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
389 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
390 if (opts[0].val.sval != NULL); |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
391 data->expr_on_init = expr_compile_string(opts[0].val.sval, data->dict); |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
392 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
393 if (opts[1].val.sval != NULL); |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
394 data->expr_on_frame = expr_compile_string(opts[1].val.sval, data->dict); |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
395 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
396 if (data->expr_on_init != NULL) |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
397 expr_execute(data->expr_on_init, data->dict); |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
398 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
399 data->reset = FALSE; |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
400 } |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
401 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
402 if (data->expr_on_frame != NULL) |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
403 expr_execute(data->expr_on_frame, data->dict); |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
404 } |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
405 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
406 struct pn_actuator_desc builtin_general_evaluate = |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
407 { |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
408 "general_evaluate", "Evalulate VM Code", |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
409 "Evaluates arbitrary VM code. Does not draw anything.", |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
410 0, general_evaluate_opts, |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
411 general_evaluate_init, general_evaluate_cleanup, general_evaluate_exec |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
412 }; |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
413 |