Benjamin Otte
2007-Jun-17 12:20 UTC
[Swfdec] Branch 'as' - libswfdec/swfdec_as_interpret.c
libswfdec/swfdec_as_interpret.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletion(-)
New commits:
diff-tree 38fbc1389267e593b44041018cbb1750bdcce0fb (from
aaca94203d8a0ccb8feb32c0d57df3401fca0350)
Author: Benjamin Otte <otte at gnome.org>
Date: Sun Jun 17 14:19:45 2007 +0200
actually convert the values to a string when comparing strings
diff --git a/libswfdec/swfdec_as_interpret.c b/libswfdec/swfdec_as_interpret.c
index 99ceb2b..9c98b45 100644
--- a/libswfdec/swfdec_as_interpret.c
+++ b/libswfdec/swfdec_as_interpret.c
@@ -780,7 +780,8 @@ swfdec_action_new_comparison_7 (SwfdecAs
swfdec_as_stack_pop (cx->frame->stack);
SWFDEC_AS_VALUE_SET_UNDEFINED (swfdec_as_stack_peek
(cx->frame->stack, 1));
} else if (SWFDEC_AS_VALUE_IS_STRING (rval) || SWFDEC_AS_VALUE_IS_STRING
(lval)) {
- int comp = strcmp (SWFDEC_AS_VALUE_GET_STRING (rval),
SWFDEC_AS_VALUE_GET_STRING (lval));
+ int comp = strcmp (swfdec_as_value_to_string (cx, rval),
+ swfdec_as_value_to_string (cx, lval));
swfdec_as_stack_pop (cx->frame->stack);
SWFDEC_AS_VALUE_SET_BOOLEAN (swfdec_as_stack_peek (cx->frame->stack,
1), action == 0x48 ? comp < 0 : comp > 0);
} else {
Benjamin Otte
2007-Jun-20 14:39 UTC
[Swfdec] Branch 'as' - libswfdec/swfdec_as_interpret.c
libswfdec/swfdec_as_interpret.c | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
New commits:
diff-tree d2871b604f89627469d6d4e314fad0c77b42fcff (from
28343be13ba26ae3f40c35433a188498ee84d98a)
Author: Andreas Henriksson <andreas at fatal.se>
Date: Wed Jun 20 16:38:18 2007 +0200
do StringEquals in a nicer way
diff --git a/libswfdec/swfdec_as_interpret.c b/libswfdec/swfdec_as_interpret.c
index 306db72..e7a260a 100644
--- a/libswfdec/swfdec_as_interpret.c
+++ b/libswfdec/swfdec_as_interpret.c
@@ -1002,13 +1002,12 @@ swfdec_action_string_compare (SwfdecAsCo
r = swfdec_as_value_to_string (cx, swfdec_as_stack_pop
(cx->frame->stack));
l = swfdec_as_value_to_string (cx, swfdec_as_stack_peek
(cx->frame->stack, 1));
- comp = strcmp (l, r);
switch (action) {
case SWFDEC_AS_ACTION_STRING_EQUALS:
- cond = comp == 0;
+ cond = l == r;
break;
case SWFDEC_AS_ACTION_STRING_LESS:
- cond = comp < 0;
+ cond = strcmp (l, r) < 0;
break;
default:
g_assert_not_reached ();
Benjamin Otte
2007-Jul-11 09:32 UTC
[Swfdec] Branch 'as' - libswfdec/swfdec_as_interpret.c
libswfdec/swfdec_as_interpret.c | 32 +++++++++++++++++++++++++++++++-
1 files changed, 31 insertions(+), 1 deletion(-)
New commits:
diff-tree c066d38e799dcb3f96bf029a675f2166941c82c7 (from
ecb27801942ecfe539553b4a5cfa7b632ac65da3)
Author: Nguy???n Th??i Ng???c Duy <pclouds at gmail.com>
Date: Wed Jul 11 11:27:40 2007 +0200
implement CloneSprite action
It works in blocky.swf, but the rest is pretty much untested.
diff --git a/libswfdec/swfdec_as_interpret.c b/libswfdec/swfdec_as_interpret.c
index 96a65a0..e0777e4 100644
--- a/libswfdec/swfdec_as_interpret.c
+++ b/libswfdec/swfdec_as_interpret.c
@@ -2083,6 +2083,36 @@ fail:
swfdec_as_stack_pop (cx);
}
+static void
+swfdec_action_clone_sprite (SwfdecAsContext *cx, guint action, const guint8
*data, guint len)
+{
+ SwfdecMovie *movie, *new_movie;
+ SwfdecAsObject *obj;
+ const char *new_name;
+ int depth;
+
+ depth = swfdec_as_value_to_integer (cx, swfdec_as_stack_peek (cx, 1)) -
16384;
+ new_name = swfdec_as_value_to_string (cx, swfdec_as_stack_peek (cx, 2));
+ if (SWFDEC_AS_VALUE_IS_STRING (swfdec_as_stack_peek (cx, 3))) {
+ const char *name;
+ name = swfdec_as_value_to_string (cx, swfdec_as_stack_peek (cx, 3));
+ swfdec_as_context_eval (cx, NULL, name, swfdec_as_stack_peek (cx, 3));
+ }
+ obj = swfdec_as_value_to_object (cx, swfdec_as_stack_peek (cx, 3));
+ if (!SWFDEC_IS_MOVIE(obj)) {
+ SWFDEC_ERROR ("Object is not an SwfdecMovie object");
+ swfdec_as_stack_pop_n (cx, 3);
+ return;
+ }
+ movie = SWFDEC_MOVIE(obj);
+ new_movie = swfdec_movie_duplicate (movie, new_name, depth);
+ if (new_movie) {
+ SWFDEC_LOG ("duplicated %s as %s to depth %u", movie->name,
new_movie->name, new_movie->depth);
+ swfdec_movie_initialize (new_movie);
+ }
+ swfdec_as_stack_pop_n (cx, 3);
+}
+
/*** PRINT FUNCTIONS ***/
static char *
@@ -2420,7 +2450,7 @@ const SwfdecActionSpec swfdec_as_actions
[0x21] = { "StringAdd", NULL, 2, 1, { NULL,
swfdec_action_string_add, swfdec_action_string_add, swfdec_action_string_add,
swfdec_action_string_add } },
[SWFDEC_AS_ACTION_GET_PROPERTY] = { "GetProperty", NULL, 2, 1, {
NULL, swfdec_action_get_property, swfdec_action_get_property,
swfdec_action_get_property, swfdec_action_get_property } },
[SWFDEC_AS_ACTION_SET_PROPERTY] = { "SetProperty", NULL, 3, 0, {
NULL, swfdec_action_set_property, swfdec_action_set_property,
swfdec_action_set_property, swfdec_action_set_property } },
- [SWFDEC_AS_ACTION_CLONE_SPRITE] = { "CloneSprite", NULL },
+ [SWFDEC_AS_ACTION_CLONE_SPRITE] = { "CloneSprite", NULL, 3, 0, {
NULL, swfdec_action_clone_sprite, swfdec_action_clone_sprite,
swfdec_action_clone_sprite, swfdec_action_clone_sprite } },
[SWFDEC_AS_ACTION_REMOVE_SPRITE] = { "RemoveSprite", NULL, 1, 0, {
NULL, swfdec_action_remove_sprite, swfdec_action_remove_sprite,
swfdec_action_remove_sprite, swfdec_action_remove_sprite } },
[SWFDEC_AS_ACTION_TRACE] = { "Trace", NULL, 1, 0, { NULL,
swfdec_action_trace, swfdec_action_trace, swfdec_action_trace,
swfdec_action_trace } },
[SWFDEC_AS_ACTION_START_DRAG] = { "StartDrag", NULL, -1, 0, { NULL,
swfdec_action_start_drag, swfdec_action_start_drag, swfdec_action_start_drag,
swfdec_action_start_drag } },
Maybe Matching Threads
- 14 commits - libswfdec/swfdec_as_context.c libswfdec/swfdec_as_interpret.c libswfdec/swfdec_as_interpret.h libswfdec/swfdec_net_stream.c libswfdec/swfdec_script.c libswfdec/swfdec_sprite_movie.c libswfdec/swfdec_tag.c libswfdec/swfdec_text_field_movie.c
- Youtube broken by 89d295a94
- Branch 'as' - 5 commits - libswfdec-gtk/swfdec_playback_alsa.c libswfdec/swfdec_as_interpret.c libswfdec/swfdec_movie.c test/trace
- Branch 'as' - 2 commits - libswfdec/swfdec_as_interpret.c
- Branch 'interpreter' - 8 commits - libswfdec/swfdec_bits.c libswfdec/swfdec_bits.h libswfdec/swfdec_js.c libswfdec/swfdec_js.h libswfdec/swfdec_script.c test/swfdec_out.c test/swfdec_out.h test/swfedit_tag.c test/swfedit_token.c test/swfedit_token.h