Mercurial > audlegacy-plugins
annotate src/paranormal/general.c @ 3138:8e26022bb814
aac: handle premature EOF on shoutcast streams more gracefully.
in combination with the neon work, we no longer have a problem. (closes #57)
author | William Pitcock <nenolod@atheme.org> |
---|---|
date | Thu, 07 May 2009 11:14:36 -0500 |
parents | f1b6f1b2cdb3 |
children |
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 |
2835 | 17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
1892
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 |
1943
56bb18dd3fdd
paranormal: CONFIG_H removal
William Pitcock <nenolod@atheme.org>
parents:
1892
diff
changeset
|
22 #include <config.h> |
149
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
23 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
24 #include "paranormal.h" |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
25 #include "actuators.h" |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
26 #include "pn_utils.h" |
1177
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
27 #include "libcalc/calc.h" |
149
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
28 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
29 /* **************** general_fade **************** */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
30 static struct pn_actuator_option_desc general_fade_opts[] = |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
31 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
32 { "amount", "The amount by which the color index of each " |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
33 "pixel should be decreased by each frame (MAX 255)", |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
34 OPT_TYPE_INT, { ival: 3 } }, |
175 | 35 { NULL } |
149
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
36 }; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
37 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
38 static void |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
39 general_fade_exec (const struct pn_actuator_option *opts, |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
40 gpointer data) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
41 { |
177 | 42 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
|
43 int i, j; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
44 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
45 for (j=0; j<pn_image_data->height; j++) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
46 for (i=0; i<pn_image_data->width; i++) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
47 pn_image_data->surface[0][PN_IMG_INDEX (i, j)] = |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
48 CAPLO (pn_image_data->surface[0][PN_IMG_INDEX (i, j)] |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
49 - amt, 0); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
50 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
51 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
52 struct pn_actuator_desc builtin_general_fade = |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
53 { |
155
adf9f4b26039
[svn] - user-friendly names (UI side unimplemented still)
nenolod
parents:
149
diff
changeset
|
54 "general_fade", "Fade-out", "Decreases the color index of each pixel", |
149
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
55 0, general_fade_opts, |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
56 NULL, NULL, general_fade_exec |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
57 }; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
58 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
59 /* **************** general_blur **************** */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
60 /* FIXME: add a variable radius */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
61 /* FIXME: SPEEEED */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
62 static void |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
63 general_blur_exec (const struct pn_actuator_option *opts, |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
64 gpointer data) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
65 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
66 int i,j; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
67 register guchar *srcptr = pn_image_data->surface[0]; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
68 register guchar *destptr = pn_image_data->surface[1]; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
69 register int sum; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
70 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
71 for (j=0; j<pn_image_data->height; j++) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
72 for (i=0; i<pn_image_data->width; i++) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
73 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
74 sum = *(srcptr)<<2; |
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 /* top */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
77 if (j > 0) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
78 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
79 sum += *(srcptr-pn_image_data->width)<<1; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
80 if (i > 0) |
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 < pn_image_data->width-1) |
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 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
85 /* bottom */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
86 if (j < pn_image_data->height-1) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
87 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
88 sum += *(srcptr+pn_image_data->width)<<1; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
89 if (i > 0) |
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 < pn_image_data->width-1) |
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 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
94 /* left */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
95 if (i > 0) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
96 sum += *(srcptr-1)<<1; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
97 /* right */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
98 if (i < pn_image_data->width-1) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
99 sum += *(srcptr+1)<<1; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
100 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
101 *destptr++ = (guchar)(sum >> 4); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
102 srcptr++; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
103 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
104 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
105 pn_swap_surfaces (); |
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 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
108 struct pn_actuator_desc builtin_general_blur = |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
109 { |
155
adf9f4b26039
[svn] - user-friendly names (UI side unimplemented still)
nenolod
parents:
149
diff
changeset
|
110 "general_blur", "Blur", "A simple 1 pixel radius blur", |
149
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
111 0, NULL, |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
112 NULL, NULL, general_blur_exec |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
113 }; |
174
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
114 |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
115 /* **************** general_mosaic **************** */ |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
116 /* FIXME: add a variable radius */ |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
117 /* FIXME: SPEEEED */ |
175 | 118 static struct pn_actuator_option_desc general_mosaic_opts[] = |
119 { | |
120 { "radius", "The pixel radius that should be used for the effect.", | |
121 OPT_TYPE_INT, { ival: 6 } }, | |
122 { NULL } | |
123 }; | |
124 | |
174
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
125 static void |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
126 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
|
127 gpointer data) |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
128 { |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
129 int i,j; |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
130 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
|
131 register guchar *destptr = pn_image_data->surface[1]; |
177 | 132 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
|
133 |
175 | 134 for (j=0; j<pn_image_data->height; j += radius) |
135 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
|
136 { |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
137 int ii = 0, jj = 0; |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
138 guchar bval = 0; |
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 /* find the brightest colour */ |
175 | 141 for (jj = 0; jj < radius && (j + jj < pn_image_data->height); jj++) |
142 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
|
143 { |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
144 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
|
145 |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
146 if (val > bval) |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
147 bval = val; |
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 |
175 | 150 for (jj = 0; jj < radius && (j + jj < pn_image_data->height); jj++) |
151 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
|
152 { |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
153 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
|
154 } |
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 |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
157 pn_swap_surfaces (); |
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 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
|
161 { |
176 | 162 "general_mosaic", "Mosaic", "A simple mosaic effect.", |
175 | 163 0, general_mosaic_opts, |
174
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
164 NULL, NULL, general_mosaic_exec |
3d98be3d74c2
[svn] - mosaic effect (in progress, custom size will be in the next commit)
nenolod
parents:
155
diff
changeset
|
165 }; |
177 | 166 |
167 /* **************** general_clear **************** */ | |
168 static void | |
169 general_clear_exec (const struct pn_actuator_option *opts, | |
170 gpointer data) | |
171 { | |
172 memset(pn_image_data->surface[0], '\0', | |
173 (pn_image_data->height * pn_image_data->width)); | |
174 } | |
175 | |
176 struct pn_actuator_desc builtin_general_clear = | |
177 { | |
178 "general_clear", "Clear Surface", "Clears the surface.", | |
179 0, NULL, | |
180 NULL, NULL, general_clear_exec | |
181 }; | |
182 | |
179
b44ab11a64c2
[svn] - NOOP instruction. What this does is basically takes a slot in a
nenolod
parents:
177
diff
changeset
|
183 /* **************** general_noop **************** */ |
b44ab11a64c2
[svn] - NOOP instruction. What this does is basically takes a slot in a
nenolod
parents:
177
diff
changeset
|
184 static void |
b44ab11a64c2
[svn] - NOOP instruction. What this does is basically takes a slot in a
nenolod
parents:
177
diff
changeset
|
185 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
|
186 gpointer data) |
b44ab11a64c2
[svn] - NOOP instruction. What this does is basically takes a slot in a
nenolod
parents:
177
diff
changeset
|
187 { |
b44ab11a64c2
[svn] - NOOP instruction. What this does is basically takes a slot in a
nenolod
parents:
177
diff
changeset
|
188 return; |
b44ab11a64c2
[svn] - NOOP instruction. What this does is basically takes a slot in a
nenolod
parents:
177
diff
changeset
|
189 } |
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 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
|
192 { |
b44ab11a64c2
[svn] - NOOP instruction. What this does is basically takes a slot in a
nenolod
parents:
177
diff
changeset
|
193 "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
|
194 0, NULL, |
b44ab11a64c2
[svn] - NOOP instruction. What this does is basically takes a slot in a
nenolod
parents:
177
diff
changeset
|
195 NULL, NULL, general_noop_exec |
b44ab11a64c2
[svn] - NOOP instruction. What this does is basically takes a slot in a
nenolod
parents:
177
diff
changeset
|
196 }; |
b44ab11a64c2
[svn] - NOOP instruction. What this does is basically takes a slot in a
nenolod
parents:
177
diff
changeset
|
197 |
181 | 198 /* **************** general_invert **************** */ |
199 static void | |
200 general_invert_exec (const struct pn_actuator_option *opts, | |
201 gpointer data) | |
202 { | |
203 int i, j; | |
204 | |
205 for (j=0; j < pn_image_data->height; j++) | |
206 for (i=0; i < pn_image_data->width; i++) | |
207 pn_image_data->surface[0][PN_IMG_INDEX (i, j)] = | |
208 255 - pn_image_data->surface[0][PN_IMG_INDEX (i, j)]; | |
209 } | |
210 | |
211 struct pn_actuator_desc builtin_general_invert = | |
212 { | |
213 "general_invert", "Value Invert", "Performs a value invert.", | |
214 0, NULL, | |
215 NULL, NULL, general_invert_exec | |
216 }; | |
217 | |
182
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
218 /* **************** general_replace **************** */ |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
219 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
|
220 { |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
221 { "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
|
222 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
|
223 { "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
|
224 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
|
225 { "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
|
226 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
|
227 { NULL } |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
228 }; |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
229 |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
230 static void |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
231 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
|
232 gpointer data) |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
233 { |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
234 register int i, j; |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
235 register guchar val; |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
236 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
|
237 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
|
238 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
|
239 |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
240 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
|
241 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
|
242 { |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
243 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
|
244 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
|
245 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
|
246 } |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
247 } |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
248 |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
249 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
|
250 { |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
251 "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
|
252 0, general_replace_opts, |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
253 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
|
254 }; |
6048abdac7d1
[svn] - add value replace filter, replaces a range of values with a different value
nenolod
parents:
181
diff
changeset
|
255 |
271 | 256 /* **************** general_swap **************** */ |
257 static void | |
258 general_swap_exec (const struct pn_actuator_option *opts, | |
259 gpointer data) | |
260 { | |
261 pn_swap_surfaces (); | |
262 } | |
263 | |
264 struct pn_actuator_desc builtin_general_swap = | |
265 { | |
266 "general_swap", "Swap Surface", "Swaps the surface.", | |
267 0, NULL, | |
268 NULL, NULL, general_swap_exec | |
269 }; | |
272 | 270 |
271 /* **************** general_copy **************** */ | |
272 static void | |
273 general_copy_exec (const struct pn_actuator_option *opts, | |
274 gpointer data) | |
275 { | |
276 memcpy(pn_image_data->surface[1], pn_image_data->surface[0], | |
277 (pn_image_data->width * pn_image_data->height)); | |
278 } | |
279 | |
280 struct pn_actuator_desc builtin_general_copy = | |
281 { | |
282 "general_copy", "Copy Surface", "Copies the surface to the other surface.", | |
283 0, NULL, | |
284 NULL, NULL, general_copy_exec | |
285 }; | |
278 | 286 |
287 /* **************** general_flip **************** */ | |
288 static struct pn_actuator_option_desc general_flip_opts[] = | |
289 { | |
290 { "direction", "Negative is horizontal, positive is vertical.", | |
291 OPT_TYPE_INT, { ival: -1 } }, | |
292 { NULL } | |
293 }; | |
294 | |
295 static void | |
296 general_flip_exec (const struct pn_actuator_option *opts, | |
297 gpointer data) | |
298 { | |
299 gint x, y; | |
300 | |
301 if (opts[0].val.ival < 0) | |
302 { | |
303 for (y = 0; y < pn_image_data->height; y++) | |
304 for (x = 0; x < pn_image_data->width; x++) | |
305 { | |
306 pn_image_data->surface[1][PN_IMG_INDEX(pn_image_data->width - x, y)] = | |
307 pn_image_data->surface[0][PN_IMG_INDEX(x, y)]; | |
308 } | |
309 } | |
310 else | |
311 { | |
312 for (y = 0; y < pn_image_data->height; y++) | |
313 for (x = 0; x < pn_image_data->width; x++) | |
314 { | |
315 pn_image_data->surface[1][PN_IMG_INDEX(x, pn_image_data->height - y)] = | |
316 pn_image_data->surface[0][PN_IMG_INDEX(x, y)]; | |
317 } | |
318 } | |
319 | |
320 pn_swap_surfaces (); | |
321 } | |
322 | |
323 struct pn_actuator_desc builtin_general_flip = | |
324 { | |
325 "general_flip", "Flip Surface", "Flips the surface.", | |
326 0, general_flip_opts, | |
327 NULL, NULL, general_flip_exec | |
328 }; | |
1177
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
329 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
330 /* ***************** general_evaluate ***************** */ |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
331 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
332 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
|
333 { |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
334 { "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
|
335 { "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
|
336 { NULL } |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
337 }; |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
338 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
339 struct pn_evaluate_ctx |
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 expression_t *expr_on_init, *expr_on_frame; |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
342 symbol_dict_t *dict; |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
343 gboolean reset; |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
344 }; |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
345 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
346 static void |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
347 general_evaluate_init(gpointer *data) |
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 *data = g_new0(struct pn_evaluate_ctx, 1); |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
350 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
351 ((struct pn_evaluate_ctx *)*data)->reset = TRUE; |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
352 } |
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 static void |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
355 general_evaluate_cleanup(gpointer op_data) |
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 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
|
358 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
359 g_return_if_fail(data != NULL); |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
360 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
361 if (data->expr_on_init) |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
362 expr_free(data->expr_on_init); |
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_frame) |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
365 expr_free(data->expr_on_frame); |
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->dict) |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
368 dict_free(data->dict); |
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) |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
371 g_free(data); |
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 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
374 static void |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
375 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
|
376 gpointer op_data) |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
377 { |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
378 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
|
379 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
380 if (data->reset) |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
381 { |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
382 if (data->dict) |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
383 dict_free(data->dict); |
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 data->dict = dict_new(); |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
386 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
387 if (opts[0].val.sval != NULL); |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
388 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
|
389 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
390 if (opts[1].val.sval != NULL); |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
391 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
|
392 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
393 if (data->expr_on_init != NULL) |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
394 expr_execute(data->expr_on_init, 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 data->reset = FALSE; |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
397 } |
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 if (data->expr_on_frame != NULL) |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
400 expr_execute(data->expr_on_frame, data->dict); |
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 |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
403 struct pn_actuator_desc builtin_general_evaluate = |
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 "general_evaluate", "Evalulate VM Code", |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
406 "Evaluates arbitrary VM code. Does not draw anything.", |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
407 0, general_evaluate_opts, |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
408 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
|
409 }; |
a7c98f237b03
[svn] - add general_evaluate which can run arbitrary VM code
nenolod
parents:
278
diff
changeset
|
410 |