while(op)
{
action->next = (ActionTAG*)malloc(sizeof(ActionTAG));
+ memset(action->next, 0, sizeof(ActionTAG));
action->next->prev = action;
action->next->next = 0;
+ action->next->parent = tmp.next;
action = action->next;
op = swf_GetU8(tag);
void swf_ActionFree(ActionTAG*action)
{
+ if(!action) {
+ fprintf(stderr, "Warning: freeing zero action");
+ return;
+ }
+ action = action->parent;
+ if(!action) {
+ fprintf(stderr, "Warning: freeing zero action (no parent)");
+ return;
+ }
+
while(action)
{
ActionTAG*tmp;
ActionTAG* action_Constantpool(ActionTAG*atag, char* constantpool) {return atag;}
ActionTAG* action_With(ActionTAG*atag, char*object) {return atag;}
+#include "../action/actioncompiler.h"
+
+ActionTAG* swf_ActionCompile(const char* source, int version)
+{
+ TAG* tag;
+ ActionTAG* a = 0;
+ void*buffer = 0;
+ int len = 0;
+ int ret;
+
+ tag = swf_InsertTag(NULL, ST_DOACTION);
+ ret = compileSWFActionCode(source, version, &buffer, &len);
+ if(!ret || buffer==0 || len == 0)
+ return 0;
+
+ swf_SetBlock(tag, buffer, len);
+ swf_SetU8(tag, 0);
+
+ free(buffer);
+
+ a = swf_ActionGet(tag);
+ swf_DeleteTag(tag);
+ return a;
+}
+
+
/*
Properties:
void swf_ActionEnumerateTargets(ActionTAG*atag, char*(*callback)(char*));
void swf_ActionEnumerateStrings(ActionTAG*atag, char*(*callback)(char*));
+// using action/actioncompiler.h:
+ActionTAG* swf_ActionCompile(const char* source, int version);
+
ActionTAG* action_End(ActionTAG*atag);
ActionTAG* action_NextFrame(ActionTAG*atag);
ActionTAG* action_PreviousFrame(ActionTAG*atag);