libsswf: sswf::Action Class Reference

# sswf::Action Class Reference

Holds an action. More...

`#include <libsswf.h>`

Inheritance diagram for sswf::Action:

List of all members.

## Public Types
enum | action_t { ACTION_UNKNOWN = -1, ACTION_LABEL = -2, ACTION_min = 0x00, ACTION_END = 0x00, ACTION_NEXT_FRAME = 0x04, ACTION_PREVIOUS_FRAME = 0x05, ACTION_PLAY = 0x06, ACTION_STOP = 0x07, ACTION_TOGGLE_QUALITY = 0x08, ACTION_STOP_SOUND = 0x09, ACTION_ADD = 0x0A, ACTION_SUBTRACT = 0x0B, ACTION_MULTIPLY = 0x0C, ACTION_DIVIDE = 0x0D, ACTION_EQUAL = 0x0E, ACTION_LESS_THAN = 0x0F, ACTION_LOGICAL_AND = 0x10, ACTION_LOGICAL_OR = 0x11, ACTION_LOGICAL_NOT = 0x12, ACTION_STRING_EQUAL = 0x13, ACTION_STRING_LENGTH = 0x14, ACTION_SUB_STRING = 0x15, ACTION_POP = 0x17, ACTION_INTEGRAL_PART = 0x18, ACTION_GET_VARIABLE = 0x1C, ACTION_SET_VARIABLE = 0x1D, ACTION_SET_TARGET2 = 0x20, ACTION_CONCATENATE = 0x21, ACTION_GET_PROPERTY = 0x22, ACTION_SET_PROPERTY = 0x23, ACTION_DUPLICATE_SPRITE = 0x24, ACTION_REMOVE_SPRITE = 0x25, ACTION_TRACE = 0x26, ACTION_START_DRAG = 0x27, ACTION_STOP_DRAG = 0x28, ACTION_STRING_LESS_THAN = 0x29, ACTION_THROW = 0x2A, ACTION_CAST_OBJECT = 0x2B, ACTION_IMPLEMENTS = 0x2C, ACTION_FSCOMMAND2 = 0x2D, ACTION_RANDOM = 0x30, ACTION_MBSTRING_LENGTH = 0x31, ACTION_ORD = 0x32, ACTION_CHR = 0x33, ACTION_GET_TIMER = 0x34, ACTION_SUB_MBSTRING = 0x35, ACTION_MBORD = 0x36, ACTION_MBCHR = 0x37, ACTION_DELETE = 0x3A, ACTION_SET_LOCAL_VAR = 0x3C, ACTION_SET_LOCAL_VARIABLE = 0x3C, ACTION_CALL_FUNCTION = 0x3D, ACTION_RETURN = 0x3E, ACTION_MODULO = 0x3F, ACTION_NEW = 0x40, ACTION_DECLARE_LOCAL_VAR = 0x41, ACTION_DECLARE_LOCAL_VARIABLE = 0x41, ACTION_DECLARE_ARRAY = 0x42, ACTION_DECLARE_OBJECT = 0x43, ACTION_TYPE_OF = 0x44, ACTION_GET_TARGET = 0x45, ACTION_ENUMERATE = 0x46, ACTION_ADD_TYPED = 0x47, ACTION_LESS_THAN_TYPED = 0x48, ACTION_EQUAL_TYPED = 0x49, ACTION_NUMBER = 0x4A, ACTION_STRING = 0x4B, ACTION_DUPLICATE = 0x4C, ACTION_SWAP = 0x4D, ACTION_GET_MEMBER = 0x4E, ACTION_SET_MEMBER = 0x4F, ACTION_INCREMENT = 0x50, ACTION_DECREMENT = 0x51, ACTION_CALL_METHOD = 0x52, ACTION_NEW_METHOD = 0x53, ACTION_INSTANCE_OF = 0x54, ACTION_ENUMERATE_OBJECT = 0x55, ACTION_AND = 0x60, ACTION_OR = 0x61, ACTION_XOR = 0x62, ACTION_SHIFT_LEFT = 0x63, ACTION_SHIFT_RIGHT = 0x64, ACTION_SHIFT_RIGHT_UNSIGNED = 0x65, ACTION_STRICT_EQUAL = 0x66, ACTION_GREATER_THAN_TYPED = 0x67, ACTION_STRING_GREATER_THAN = 0x68, ACTION_EXTENDS = 0x69, ACTION_GOTO_FRAME = 0x81, ACTION_URL = 0x83, ACTION_STORE_REGISTER = 0x87, ACTION_DECLARE_DICTIONARY = 0x88, ACTION_STRICT_MODE = 0x89, ACTION_WAIT_FOR_FRAME = 0x8A, ACTION_SET_TARGET = 0x8B, ACTION_GOTO_LABEL = 0x8C, ACTION_WAIT_FOR_FRAME2 = 0x8D, ACTION_DECLARE_FUNCTION2 = 0x8E, ACTION_TRY = 0x8F, ACTION_WITH = 0x94, ACTION_PUSH_DATA = 0x96, ACTION_BRANCH_ALWAYS = 0x99, ACTION_URL2 = 0x9A, ACTION_DECLARE_FUNCTION = 0x9B, ACTION_BRANCH_IF_TRUE = 0x9D, ACTION_CALL_FRAME = 0x9E, ACTION_GOTO_EXPRESSION = 0x9F, ACTION_max = 0xFF }
| List all the actions supported by SSWF. More...
## Public Member Functions
| Action (TagBase *tag, action_t action)
| Initialize an action.
virtual Action * | Duplicate (void) const
| Create a clone of 'this' Action.
TagBase * | GetTag (void) const
unsigned long | Offset (void) const
| Retrieve the offset position of this action.
ErrorManager::error_code_t | OnError (ErrorManager::error_code_t errcode, const char *message,...) const
| Send an error to the error manager.
ErrorManager::error_code_t | Save (Data &data)
| Save the action in a Data buffer.
ErrorManager::error_code_t | SaveList (const Vectors *list, Data &data, const Vectors *extra=0)
| Save a list of actions in a Data buffer.
virtual Vectors * | SubList (void)
| Query for the Vectors of sub-actions.
virtual unsigned char | Version (void) const
| Retrieve the minimum version required for this action.
virtual | ~Action ()
| Clean up the action.
## Static Public Member Functions
static ActionLabel * | FindLabel (const Vectors &list, const char *label)
| Search for a label within a list of actions.
static ActionLabel * | FindLabelAtOffset (Vectors &list, unsigned long offset)
| Search for an action with the specified offset.
static int | GetMaximumRegister (const Vectors &list)
| Retrieve the largest register number used.
static int | MinimumListVersion (const Vectors &list)
| Retrive the minimum version required to use this list of actions.
static ErrorManager::error_code_t | Parse (TagBase *tag, const Data &data, Vectors &actions)
| Parse the data buffer for the next action.
static ErrorManager::error_code_t | ParseList (TagBase *tag, const Data &data, Vectors &actions)
| Parse all the actions defined in the Data buffer.
## Protected Member Functions
virtual int | GetMaxRegister (void) const
| Retrieve the largest register used by this action.
virtual ErrorManager::error_code_t | Parse2ndPass (Vectors &list)
| Second pass after a load to fix branches.
virtual ErrorManager::error_code_t | ParseData (const Data &data)
| Load extraneous data.
virtual ErrorManager::error_code_t | Save2ndPass (const Vectors &list, Data &data)
| Last chance for an action to save itself right.
virtual ErrorManager::error_code_t | SaveData (Data &data, Data &nested_data)
| Save extraneous data.
ErrorManager::error_code_t | SaveString (Data &data, const char *string)
| Save a string in a way compatible to the actions.
TagBase * | Tag (void) const
| Get the tag in which this action resides.
## Protected Attributes
const action_t | f_action
| This action code (ACTION_...).
unsigned long | f_offset
| The byte position of this action in its list.
## Private Attributes
unsigned char | f_min_version
TagBase * | f_tag

## Detailed Description

The Action class is used to hold ONE action. An array of actions can be used to generate an ActionScript.

The Action class represents one SWF raw action (i.e. no JavaScript!)

The organization of actions to create a valid script is described in my Alexis' SWF Reference—Do Action document.

Actions are ItemBase objects which can thus be added in a Vectors array. Tags which support actions will usually expose the vector used to save actions in it. Also, some actions can have sub-actions. Similarly, you have the sswf::Action::SubList(void) function which can be used to retrieve the sub-actions of a given action.

Note that newer action script code is much different from the old one. This applies to movies version 9 or better when setup to run ActionScript version 3 (see the abcFormat.html document.)

Warning:
  Most actions which support sub-actions are limited to about 64Kb of sub-action data (depending on the actions used, some actions save data in the action list and can use a lot more than 1 byte, especially the sswf::Action::ACTION_PUSH_DATA action!)

  The sswf::Action::ACTION_WAIT_FOR_FRAME and sswf::Action::ACTION_WAIT_FOR_FRAME2 are limited to 255 bytes. Also, they branch as long as the frame is not reached which is somewhat the opposite of what we would usually need.

See also:
  Alexis' SWF Reference—Do Action

## Member Enumeration Documentation

enum sswf::Action::action_t

These action enumeration variables are used whenever you create an action object. All the actions which do not require any data are created using the Action object. In this case you must specify the action enumeration variable.

Actions which require some additional data will automatically receive a default (i.e. sswf::ActionBranch is set to ACTION_BRANCH_ALWAYS by default.) Some cannot actually be changed by you (i.e. sswf::ActionCallFrame). All of them can only receive a very few set of values. Trying to set another value will generate an error on creation.

Enumerator:

  ACTION_UNKNOWN | The special unknown value. This special action number can be used to mark an entry as unknown. You cannot create and save an unknown action in an SWF file.
  ACTION_LABEL | A label to branch to. This special action repesents a label. A specific object must be created to use an ACTION_LABEL the sswf::ActionLabel object. You should name labels and then use their name with sswf::ActionBranch to jump to the instructions appearing after that label. It is legal to create multiple labels one after another without adding other instructions in between, in effect creating one label and aliases. See also: sswf::ActionBranch sswf::ActionBranch::SetLabel(const char *label) sswf::ActionLabel sswf::ActionLabel::SetLabel(const char *label)
  ACTION_min | Very first valid action. The ACTION_min value represents the smallest valid action which can be saved in an SWF file. See also: sswf::Action::ACTION_max
  ACTION_END | End the current list of actions. The ACTION_END is for programs execution what the '\0' is for C string: it represents the end of actions. It is in general not necessary for your to add this action as the system takes care of that for you automatically. It usually makes it simpler not to add the ACTION_END actions. Note that this is used once to end the entire list of actions. Actions within a function or other groups of actions are not terminated by an ACTION_END. Instead they have a size in bytes to skip their body and at the same time determine the end of actions to execute as required. See also: SWF Alexis' Reference—End
  ACTION_NEXT_FRAME | Skip the next Show Frame. The ACTION_NEXT_FRAME is useful whenever you stop the playback and thus the program pointer remains within one frame. This action forces the animation to move to the next frame and display it. See also: sswf::Action::ACTION_PLAY sswf::Action::ACTION_STOP SWF Alexis' Reference—Next Frame
  ACTION_PREVIOUS_FRAME | Jump back one frame; before the previous ShowFrame. The ACTION_PREVIOUS_FRAME is useful whenever you stop the playback and thus the program pointer remains within one frame. This action forces the animation to move to the previous frame and display it. See also: sswf::Action::ACTION_PLAY sswf::Action::ACTION_STOP SWF Alexis' Reference—Next Frame
  ACTION_PLAY | Start playing the animation. The ACTION_PLAY restart the playback of an animation. It is possible stop an animation with ACTION_STOP. The last of ACTION_PLAY or ACTION_STOP encountered in a frame is the one in effect. See also: ACTION_STOP SWF Alexis' Reference—Play
  ACTION_STOP | Start playing the animation. The ACTION_STOP stops the playback of an animation. It is possible restart an animation with ACTION_PLAY. The last of ACTION_PLAY or ACTION_STOP encountered in a frame is the one in effect. When a movie is marked as stopped, its current frame is displayed but no script is played. To restart the animation, you either have a button or another thread (i.e. a sprite) still running. Each sprite has its own loop and thus they can be considered threads thought each one's script will be executed serially. See also: ACTION_PLAY SWF Alexis' Reference—Stop
  ACTION_TOGGLE_QUALITY | Switch between low and high quality rendering. The ACTION_TOGGLE_QUALITY is used to switch between the different quality modes available. In general, you shouldn't do that. However, if you detect that the realtime frame rate is much lower than it should be, you can request the quality to drop in order to increase the frame rate to reasonable levels. This tag should not be used anymore since you cannot know exactly what you are doing without first querying for the quality. Instead you can use a function call. See also: sswf::Action::ACTION_CALL_FUNCTION SWF Alexis' Reference—ToggleQuality
  ACTION_STOP_SOUND | Stop play sounds. The ACTION_STOP_SOUND requests that the player stops playing any sound in the current movie. This means used in a sprite, it stops the sounds of that sprite and not the entire animation. See also: sswf::Action::ACTION_CALL_FUNCTION SWF Alexis' Reference—StopSound
  ACTION_ADD | Add two values on the stack. The ACTION_ADD pops two values from the stack, add them together and pushes the result back onto the stack. Note: This action should not be used anymore. It was deprecated. Instead, you should use the ACTION_ADD_TYPED action which ensures proper casting (as expected in the JavaScript reference—ECMA). This is particularly important if you are mixing strings and numbers. See also: sswf::Action::ACTION_ADD_TYPED sswf::Action::ACTION_SUBTRACT SWF Alexis' Reference—Add
  ACTION_SUBTRACT | Subtract two values on the stack. The ACTION_SUBTRACT pops two values from the stack, subtract one from the other and pushes the result back onto the stack. See also: sswf::Action::ACTION_ADD SWF Alexis' Reference—Subtract
  ACTION_MULTIPLY | Multiply two values on the stack. The ACTION_MULTIPLY pops two values from the stack, multiply them together and pushes the result back onto the stack. See also: sswf::Action::ACTION_DIVIDE sswf::Action::ACTION_MODULO SWF Alexis' Reference—Multiply
  ACTION_DIVIDE | Divide two values on the stack. The ACTION_DIVIDE pops two values from the stack, divide one by the other and pushes the result back onto the stack. See also: sswf::Action::ACTION_MULTIPLY sswf::Action::ACTION_MODULO SWF Alexis' Reference—Divide
  ACTION_EQUAL | Test whether two objects are equal. The ACTION_EQUAL pops two values from the stack, compare them for equality and pushes the result back on the stack. There is not action not equal. Instead you need to use this action and an ACTION_LOGICAL_NOT. Note: This action should not be used anymore. It was deprecated. Instead, you should use the ACTION_EQUAL_TYPED action which ensures proper casting (as expected in the JavaScript reference—ECMA). See also: sswf::Action::ACTION_EQUAL_TYPED sswf::Action::ACTION_STRICT_EQUAL sswf::Action::ACTION_LESS_THAN sswf::Action::ACTION_LESS_THAN_TYPED sswf::Action::ACTION_GREATER_THAN_TYPED sswf::Action::ACTION_LOGICAL_NOT sswf::Action::ACTION_LOGICAL_AND sswf::Action::ACTION_LOGICAL_OR SWF Alexis' Reference—Equal
  ACTION_LESS_THAN | Test whether two objects are ordered. The ACTION_LESS_THAN pops two values from the stack, compare them for order and pushes the result back on the stack. Note that in older versions you only had a `less` `than`. In new SWF versions there is a `greater` `than` which makes it simpler to compare either side. With only a `less` `than` instruction, you need to use the ACTION_SWAP and the ACTION_LOGICAL_NOT to obtain all the possible behaviors. Note: This action should not be used anymore. It was deprecated. Instead, you should use the ACTION_LESS_THAN_TYPED action which ensures proper casting (as expected in the JavaScript reference—ECMA). See also: sswf::Action::ACTION_EQUAL sswf::Action::ACTION_EQUAL_TYPED sswf::Action::ACTION_STRICT_EQUAL sswf::Action::ACTION_LESS_THAN_TYPED sswf::Action::ACTION_GREATER_THAN_TYPED sswf::Action::ACTION_LOGICAL_NOT sswf::Action::ACTION_LOGICAL_AND sswf::Action::ACTION_LOGICAL_OR SWF Alexis' Reference—Less Than
  ACTION_LOGICAL_AND | Test whether two objects are true. The ACTION_LOGICAL_AND pops two values from the stack, casts them to a boolean value, computes the result (if both values are true, then the result is true, otherwise it is false) and pushes the result back on the stack. See also: sswf::Action::ACTION_EQUAL sswf::Action::ACTION_EQUAL_TYPED sswf::Action::ACTION_STRICT_EQUAL sswf::Action::ACTION_LESS_THAN sswf::Action::ACTION_LESS_THAN_TYPED sswf::Action::ACTION_GREATER_THAN_TYPED sswf::Action::ACTION_LOGICAL_NOT sswf::Action::ACTION_LOGICAL_OR sswf::Action::ACTION_AND sswf::Action::ACTION_OR sswf::Action::ACTION_XOR SWF Alexis' Reference—Logical And
  ACTION_LOGICAL_OR | Combines two boolean value with an OR. The ACTION_LOGICAL_OR pops two values from the stack, cast them to boolean values, compute a logical or (i.e. if at least one value is true, use true otherwise use false) and pushes the result back on the stack. See also: sswf::Action::ACTION_EQUAL sswf::Action::ACTION_EQUAL_TYPED sswf::Action::ACTION_STRICT_EQUAL sswf::Action::ACTION_LESS_THAN sswf::Action::ACTION_LESS_THAN_TYPED sswf::Action::ACTION_GREATER_THAN_TYPED sswf::Action::ACTION_LOGICAL_NOT sswf::Action::ACTION_LOGICAL_AND sswf::Action::ACTION_AND sswf::Action::ACTION_OR sswf::Action::ACTION_XOR SWF Alexis' Reference—Logical Or
  ACTION_LOGICAL_NOT | Apply a logical not to the value on the stack. The ACTION_LOGICAL_NOT pops one object from the stack, cast it to a boolean value if necessary, then pushes `true` on the stack when the value is `false` and vice versa. This action is particularly useful when branching since SWF only supports a branch if true action (i.e. no branch if false action!) See also: sswf::Action::ACTION_BRANCH_IF_TRUE sswf::Action::ACTION_EQUAL sswf::Action::ACTION_EQUAL_TYPED sswf::Action::ACTION_STRICT_EQUAL sswf::Action::ACTION_LESS_THAN sswf::Action::ACTION_LESS_THAN_TYPED sswf::Action::ACTION_GREATER_THAN_TYPED sswf::Action::ACTION_LOGICAL_AND sswf::Action::ACTION_LOGICAL_OR sswf::Action::ACTION_AND sswf::Action::ACTION_OR sswf::Action::ACTION_XOR SWF Alexis' Reference—Logical Not
  ACTION_STRING_EQUAL | Test whether two strings are equal. The ACTION_STRING_EQUAL pops two strings from the stack, compare them for equality and pushes the result back on the stack. This action will ensure that two strings which represent numbers are still compared as strings and not numbers. Note: This action should not be used anymore. It was deprecated. Instead, you should use the ACTION_EQUAL_TYPED action which ensures proper casting (as expected in the JavaScript reference—ECMA). See also: sswf::Action::ACTION_EQUAL_TYPED sswf::Action::ACTION_STRICT_EQUAL sswf::Action::ACTION_STRING_LESS_THAN sswf::Action::ACTION_STRING_GREATER_THAN SWF Alexis' Reference—String Equal
  ACTION_STRING_LENGTH | Compute the length of a string in characters. The ACTION_STRING_LENGTH pops one string, counts the number of characters and pushes the result back on the stack. Note: This action should not be used anymore. It was deprecated. Instead, you should use the ACTION_MBSTRING_LENGTH action which ensures the proper length for a UTF-8 string. See also: sswf::Action::ACTION_MBSTRING_LENGTH SWF Alexis' Reference—String Length
  ACTION_SUB_STRING | Retrieve part of a string. The ACTION_SUB_STRING pops one string and two numbers: one position and one length; then it generates a new string from the sub-string starting at that position and for that many characters; this is the result which is pushed backed on the stack. Note: This action should not be used anymore. It was deprecated. Instead, you should use the ACTION_SUB_MBSTRING action which ensures the proper position and length for a UTF-8 string. See also: sswf::Action::ACTION_SUB_MBSTRING SWF Alexis' Reference—SubString
  ACTION_POP | Pop one element from the stack. The ACTION_POP action is used to forget about the result of a function call. See also: sswf::Action::ACTION_DUPLICATE sswf::Action::ACTION_SWAP SWF Alexis' Reference—Pop
  ACTION_INTEGRAL_PART | Remove the fractional part of a float. The ACTION_INTEGRAL_PART action is used on a floating point to remove the fractional part. This action does not round the input. It only removes the fractional part. To get a rounding effect, add 0.5 to the float first. This is the equivalent of the floor() function in the C/C++ math library. One can use the modulo action with 1.0 to extract the fractional part. See also: sswf::Action::ACTION_MODULO SWF Alexis' Reference—Integral Part
  ACTION_GET_VARIABLE | Read a variable. The ACTION_GET_VARIABLE action reads the content of a variable and puts it on the stack. The name of the variable is taken from the stack. The name can be a full path. See also: sswf::Action::ACTION_SET_VARIABLE sswf::Action::ACTION_SET_LOCAL_VARIABLE sswf::Action::ACTION_GET_PROPERTY sswf::Action::ACTION_SET_PROPERTY sswf::Action::ACTION_GET_MEMBER sswf::Action::ACTION_SET_MEMBER sswf::Action::ACTION_DELETE SWF Alexis' Reference—Get Variable
  ACTION_SET_VARIABLE | Read a variable. The ACTION_SET_VARIABLE action reads the content of a variable and puts it on the stack. The new value for the variable is pop first from the stack, then the name of the variable. The name can be a full path. See also: sswf::Action::ACTION_GET_VARIABLE sswf::Action::ACTION_SET_LOCAL_VARIABLE sswf::Action::ACTION_GET_PROPERTY sswf::Action::ACTION_SET_PROPERTY sswf::Action::ACTION_GET_MEMBER sswf::Action::ACTION_SET_MEMBER sswf::Action::ACTION_DELETE SWF Alexis' Reference—Set Variable
  ACTION_SET_TARGET2 | Set an object as current. The ACTION_SET_TARGET2 action retreives one string from the stack. The string must be either the empty string (to cancel a previous set target) or the name of an existing object (sprite, movie). Actions such as ACTION_SET_PROPERTY and ACTION_GET_PROPERTY following a set target apply to the current object. In other words, when an empty string is specified, the actions apply to the main object, otherwise to the specified object. See also: sswf::Action::ACTION_GET_TARGET sswf::Action::ACTION_SET_TARGET sswf::Action::ACTION_WITH SWF Alexis' Reference—Set Target (dynamic)
  ACTION_CONCATENATE | Concatenate two strings together. The ACTION_CONCATENATE action retrieves two strings from the stack, concatenate them together and push the result back on the stack. If one of the input is not a string, the `toString()` function is called on the object. If not available, an empty string is used or the SWF throws (depending on the version and setup.) Newer versions should make use of the ACTION_ADD_TYPED instead. The add will concatenate strings properly as expected unless both operands are numbers in which case the usual addition is applied. See also: sswf::Action::ACTION_STRING_ADD_TYPED sswf::Action::ACTION_STRING_EQUAL sswf::Action::ACTION_STRICT_EQUAL sswf::Action::ACTION_STRING_LENGTH SWF Alexis' Reference—Concatenate
  ACTION_GET_PROPERTY | Read from an object property. The ACTION_GET_PROPERTY action reads the content of the specified property of the specified object (sprite, movie) and puts it on the stack. The name of the property is taken from the stack as a number. The name of a property is represented by a number. The number can be either an integer or a floating point, though it has been a rule to use floating points. In general, this is used by a compiler as an optimization. Otherwise, it is recommended to use the ACTION_GET_MEMBER with the name of the property in a string. Some of these numeric properties may be removed in future versions of SWF. See also: sswf::Action::ACTION_SET_PROPERTY sswf::Action::ACTION_GET_VARIABLE sswf::Action::ACTION_SET_VARIABLE sswf::Action::ACTION_GET_MEMBER sswf::Action::ACTION_SET_MEMBER sswf::Action::ACTION_DELETE SWF Alexis' Reference—Get Property
  ACTION_SET_PROPERTY | Write to an object property. The ACTION_SET_PROPERTY action gets the new property value, the name of the property (as a number) and the name of the object (as a string) from the stack and saves the new property value in that object property. The name of a property is represented by a number. The number can be either an integer or a floating point, though it has been a rule to use floating points. In general, this is used by a compiler as an optimization. Otherwise, it is recommended to use the ACTION_SET_MEMBER with the name of the property in a string. Some of these numeric properties may be removed in future versions of SWF. See also: sswf::Action::ACTION_GET_PROPERTY sswf::Action::ACTION_GET_VARIABLE sswf::Action::ACTION_SET_VARIABLE sswf::Action::ACTION_GET_MEMBER sswf::Action::ACTION_SET_MEMBER sswf::Action::ACTION_DELETE SWF Alexis' Reference—Set Property
  ACTION_DUPLICATE_SPRITE | Create a new sprite from an existing sprite. The ACTION_DUPLICATE_SPRITE action creates a duplicate of an existing sprite. The new way to do so is to use the ACTION_NEW which represents the ActionScript new operator. The new operator is somewhat different since it will also call the constructor, though some people may still want to use this action instead. See also: sswf::Action::ACTION_REMOVE_SPRITE sswf::Action::ACTION_NEW SWF Alexis' Reference—Duplicate Sprite
  ACTION_REMOVE_SPRITE | Remove an existing sprite from the display list. The ACTION_REMOVE_SPRITE action searches for the specified sprite and remove it from the display list. Once removed, the sprite is also deleted and cannot be reused. This action should be used whenever a sprite was created with the ACTION_DUPLICATE_SPRITE. Objects created with the ACTION_NEW operator need to be deleted with the ACTION_DELETE operator. See also: sswf::Action::ACTION_DUPLICATE_SPRITE sswf::Action::ACTION_NEW SWF Alexis' Reference—Remove Sprite
  ACTION_TRACE | Turn on TRACE mode. This is a Macromedia Flash internal action caught by the debugger. Whenever encountered, it starts tracing the execution of your code. In the player, it has no effect. See also: SWF Alexis' Reference—Trace
  ACTION_START_DRAG | Start dragging an object. This action has the effect of attaching an object to the user's mouse. The following movements of the mouse will move the object until the ACTION_STOP_DRAG is used. This action is often executed after an sswf::Event::EVENT_POINTER_DOWN. See also: sswf::Event::EVENT_POINTER_DOWN sswf::Event::EVENT_POINTER_DRAG_ENTER sswf::Event::EVENT_POINTER_DRAG_LEAVE sswf::Action::ACTION_STOP_DRAG SWF Alexis' Reference—Start Drag
  ACTION_STOP_DRAG | Stop dragging the dragged object. This action must be called once the drag action is over. This breaks the effect of having an object follow the user's mouse all over the place. This action is often executed after an sswf::Event::EVENT_POINTER_UP. See also: sswf::Event::EVENT_POINTER_UP sswf::Event::EVENT_POINTER_DRAG_ENTER sswf::Event::EVENT_POINTER_DRAG_LEAVE sswf::Action::ACTION_STOP_DRAG SWF Alexis' Reference—Stop Drag
  ACTION_STRING_LESS_THAN | Test whether two strings are ordered. The ACTION_STRING_LESS_THAN pops two strings from the stack, compare them for order and pushes the result back on the stack. This action will ensure that two strings which represent numbers are still compared as strings and not numbers. Note: This action should not be used anymore. It was deprecated. Instead, you should use the ACTION_LESS_THAN_TYPED action which ensures proper casting (as expected in the JavaScript reference—ECMA). See also: sswf::Action::ACTION_LESS_THAN_TYPED sswf::Action::ACTION_STRING_EQUAL sswf::Action::ACTION_STRICT_EQUAL sswf::Action::ACTION_STRING_GREATER_THAN SWF Alexis' Reference—String Less Than
  ACTION_THROW | Throw an exception. The ACTION_THROW pops one element from the stack and generates an exception of that type. One can use a try/catch/finaly block to manage exceptions. See also: sswf::Action::ACTION_TRY SWF Alexis' Reference—Throw
  ACTION_CAST_OBJECT | Cast from one type to another. The ACTION_CAST_OBJECT action transform an object reference from one time to another. Really, in Javascript, this means making sure that an object is of a specified type. If not, you get NULL. Otherwise the action has no effect. This is similar to sswf::Action::ACTION_INSTANCE_OF except that it returns a reference to the object instead of a boolean value which often is more practical. See also: sswf::Action::ACTION_INSTANCE_OF sswf::Action::ACTION_TYPE_OF SWF Alexis' Reference—Cast Object
  ACTION_IMPLEMENTS | Define a list of interfaces that an object implements. The ACTION_IMPLEMENTS is used to mark an object as a derivation of one or more objects. These other objects are expected to be interfaces. This means they should only define abstract functions. See also: sswf::Action::ACTION_EXTENDS SWF Alexis' Reference—Implements
  ACTION_FSCOMMAND2 | Dynamic "Foreign Script Command". The ACTION_FSCOMMAND2 action pops an integer which is the number of strings to pop next. The first string popped is the name of the command to execute and the following strings are its parameters. FS in this action name means Foreign Script. In other words, not an ActionScript command, but a javascript command from within the browser. In order to execute dynamic ActionScript code, use the eval() function instead. Note that the SWF implementation of eval() is quite limited. So don't expect too much out of it. See also: sswf::Action::ACTION_DECLARE_FUNCTION sswf::Action::ACTION_DECLARE_FUNCTION2 SWF Alexis' Reference—FSCommand2
  ACTION_RANDOM | Generates a random value. The ACTION_RANDOM action pops one number from the stack and generates a random value between 0 and that number (the number not included.) The random value is not very good in older SWF players. It is suggested you use the Math.Random() function instead, which returns a value between 0.0 and 1.0. See also: sswf::Action::ACTION_CALL_METHOD SWF Alexis' Reference—Random
  ACTION_MBSTRING_LENGTH | Compute the length of a UTF-8 string in characters. The ACTION_MBSTRING_LENGTH pops one string, counts the number of characters and pushes the result back on the stack. The string is assumed to be defined in UTF-8. See also: sswf::Action::ACTION_STRING_LENGTH SWF Alexis' Reference—String Length (multi-bytes)
  ACTION_ORD | Transform a character in the corresponding integer. The ACTION_ORD action pops one string and transform the first character in a number and push that number on the stack. This action can only deal with ASCII strings. Use the sswf::Action::ACTION_MBORD for international strings. See also: sswf::Action::ACTION_MBORD sswf::Action::ACTION_CHR sswf::Action::ACTION_MBCHR SWF Alexis' Reference—Ord
  ACTION_CHR | Transform a number in the corresponding character. The ACTION_CHR action pops one number and transform it in a character, then it pushes a string composed of that character on the stack. This action can only deal with ASCII characters. Use the sswf::Action::ACTION_MBCHR for international characters. See also: sswf::Action::ACTION_MBCHR sswf::Action::ACTION_ORD sswf::Action::ACTION_MBORD SWF Alexis' Reference—Chr
  ACTION_GET_TIMER | Push the current frame number on the stack. The ACTION_GET_TIMER action gets the frame counter and push it on the stack. This is the main frame counter for the main SWF movie. In the newer versions of SWF you have access to a similar function on each movie (I think it is called GetFrame(), but I'd have to verify...) See also: SWF Alexis' Reference—Get Timer
  ACTION_SUB_MBSTRING | Retrieve part of a string. The ACTION_SUB_MBSTRING pops one string and two numbers: one position and one length; then it generates a new string from the sub-string starting at that position and for that many characters; this is the result which is pushed backed on the stack. This action views the input string as a UTF-8 encoded string. See also: sswf::Action::ACTION_SUB_STRING SWF Alexis' Reference—SubString
  ACTION_MBORD | Transform a character in the corresponding integer. The ACTION_MBORD action pops one string and transform the first character in a number and push that number on the stack. This action deals with any character (yet SWF is limited to 16 bits characters or UCS-2). See also: sswf::Action::ACTION_ORD sswf::Action::ACTION_CHR sswf::Action::ACTION_MBCHR SWF Alexis' Reference—Ord (multibyte)
  ACTION_MBCHR | Transform a number in the corresponding character. The ACTION_MBCHR action pops one number and transform it in a character, then it pushes a string composed of that character on the stack. This action can deal with any international characters (yet SWF is limited to 16 bits characters or UCS-2.) See also: sswf::Action::ACTION_CHR sswf::Action::ACTION_ORD sswf::Action::ACTION_MBORD SWF Alexis' Reference—Chr (multibyte)
  ACTION_DELETE | Delete an object. The ACTION_DELETE action pops an object and a string to delete a property in an object. Note that an object does not need to be deleted. If all references to that object disappear, then the object is automatically deleted. It is possible to delete a global variable by pushing undefined on the stack instead of an object. See also: sswf::Action::ACTION_NEW sswf::Action::ACTION_GET_VARIABLE sswf::Action::ACTION_SET_VARIABLE sswf::Action::ACTION_GET_MEMBER sswf::Action::ACTION_SET_MEMBER sswf::Action::ACTION_GET_PROPERTY sswf::Action::ACTION_SET_PROPERTY SWF Alexis' Reference—Delete
  ACTION_SET_LOCAL_VAR | Same as sswf::Action::ACTION_SET_LOCAL_VARIABLE.
  ACTION_SET_LOCAL_VARIABLE | Set a variable local to the function being executed. When running within a function, it is possible to create a variable within this function. This is very useful to avoid clashes between variable names between the different functions you write. To get a local variable, use the sswf::Action::ACTION_GET_VARIABLE action. See also the sswf::Action::ACTION_DECLARE_LOCAL_VARIABLE. See also: sswf::Action::ACTION_DECLARE_LOCAL_VARIABLE sswf::Action::ACTION_GET_VARIABLE sswf::Action::ACTION_SET_VARIABLE sswf::Action::ACTION_GET_PROPERTY sswf::Action::ACTION_SET_PROPERTY sswf::Action::ACTION_GET_MEMBER sswf::Action::ACTION_SET_MEMBER sswf::Action::ACTION_DELETE SWF Alexis' Reference—Set Local Variable
  ACTION_CALL_FUNCTION | Call a global function. This action is used to call a global or internal function. This action cannot be used to call a function on an object. Use the sswf::Action::ACTION_CALL_METHOD instead. When a function returns, something will be on the stack. A function declared as void in ActionScript usually return an undefined entry. Just use sswf::Action::ACTION_POP to get rid of it. See the sswf::Action::ACTION_RETURN to see how you can return right away from a function. The older versions (at least up to version 6) would return as many things as you were pushing on the stack. I suggest you make sure only one object is returned from your functions! See also: sswf::Action::ACTION_DECLARE_FUNCTION sswf::Action::ACTION_DECLARE_FUNCTION2 sswf::Action::ACTION_RETURN sswf::Action::ACTION_CALL_METHOD sswf::Action::ACTION_NEW_METHOD sswf::Action::ACTION_NEW sswf::Action::ACTION_CALL_FRAME SWF Alexis' Reference—Call Function
  ACTION_RETURN | End a function execution and return. The ACTION_RETURN ends a function execution. Whatever was last pushed on the stack is what the function returns. In older versions (up to version 6 at least), the stack was not purged meaning that you could return multiple objects on the stack. This is supposedly fixed, but I did not test to confirm whether this is really the case. So be careful and make sure that you have only one object on the stack or expect the unexpected! See also: sswf::Action::ACTION_CALL_FUNCTION sswf::Action::ACTION_CALL_METHOD sswf::Action::ACTION_NEW_METHOD sswf::Action::ACTION_NEW SWF Alexis' Reference—Return
  ACTION_MODULO | Modulo of two values on the stack. The ACTION_MODULO pops two values from the stack, divide one by the other and pushes the rest back onto the stack. Use this action with 1.0 to retrieve the fractional part of a floating point value. See also: sswf::Action::ACTION_MULTIPLY sswf::Action::ACTION_DIVIDE sswf::Action::ACTION_INTEGRAL_PART SWF Alexis' Reference—Modulo
  ACTION_NEW | Create a new instance of an object. The ACTION_NEW creates a new instance of an object. The name of the class and the parameters used to call the constructor are taken from the stack. The constructor result will be discarded. The result of the ACTION_NEW is the newly created object which in general will be saved in a variable or a variable member (also called property.) To delete the object, remove all instances by deleting or reassigning the variables holding the object. To call an overloaded new constructor, you need to use the sswf::Action::ACTION_NEW_METHOD action instead. See also: sswf::Action::ACTION_DELETE sswf::Action::ACTION_SET_MEMBER sswf::Action::ACTION_SET_VARIABLE sswf::Action::ACTION_SET_LOCAL_VARIABLE sswf::Action::ACTION_CALL_FUNCTION sswf::Action::ACTION_CALL_METHOD sswf::Action::ACTION_NEW_METHOD SWF Alexis' Reference—New
  ACTION_DECLARE_LOCAL_VAR | Same as sswf::Action::ACTION_DECLARE_LOCAL_VARIABLE.
  ACTION_DECLARE_LOCAL_VARIABLE | Declare names to be used for local variables. The ACTION_DECLARE_LOCAL_VARIABLE action takes an array of strings naming all the variables that will be created in this function and need to be created locally (i.e. not visible outside of this function.) After this function, a regular sswf::Action::ACTION_SET_VARIABLE will set a local variable if its name was specified in the list of this ACTION_DECLARE_LOCAL_VARIABLE array. This action has the side effect of setting the corresponding variable to undefined. This hides any corresponding global variables in case you try to get the variable before setting it. See also: sswf::Action::ACTION_SET_LOCAL_VARIABLE sswf::Action::ACTION_GET_VARIABLE sswf::Action::ACTION_SET_VARIABLE SWF Alexis' Reference—Declare Local Variable
  ACTION_DECLARE_ARRAY | Declare an array. The ACTION_DECLARE_ARRAY action creates an array object and save the result on the stack. This action pops one number from the stack which is the number of values pushed on the stack which will be used to initialize the array. These values are then assigned to the array starting at index 0. A counter of 0 means only one value is to be assigned. A counter of 1 means 2 values are to be assigned. Etc. To initialize an array sporadically, use the sswf::Action::ACTION_DECLARE_OBJECT instead. See also: sswf::Action::ACTION_DECLARE_OBJECT sswf::Action::ACTION_ENUMERATE SWF Alexis' Reference—Declare Array
  ACTION_DECLARE_OBJECT | Declare an object and its properties. The ACTION_DECLARE_OBJECT action creates an object and save the result on the stack. This action pops the name of the new object and the number of members defined on the stack. The stack holds the name and the value of each pre-defined member. The value of a member can be a function (when a function is declared without a name, it is stacked!) Thus, in effect, you can declare methods! It is possible to create an array with the ACTION_DECLARE_OBJECT by specifying the indices as the variable member names. In this case, you can initializes an array sporadically. See also: sswf::Action::ACTION_DECLARE_ARRAY sswf::Action::ACTION_ENUMERATE SWF Alexis' Reference—Declare Object
  ACTION_TYPE_OF | Determine the type of the data on the stack. The ACTION_TYPE_OF action pops one object from the stack, determines its type, and push the name of the type back on the stack as a string. It is suggested to use one of sswf::Action::ACTION_CAST_OBJECT or sswf::Action::ACTION_INSTANCE_OF isntead. If you need to keep the data also, use the sswf::Action::ACTION_DUPLICATE first. The possible types are:
        number
        boolean
        string
        object
        movieclip
        null
        undefined
        function
  See also: sswf::Action::ACTION_CAST_OBJECT sswf::Action::ACTION_INSTANCE_OF SWF Alexis' Reference—Type Of
  ACTION_GET_TARGET | Make this object the target. Get the path to the specified sprite and make it the target (as with sswf::Action::ACTION_SET_TARGET2.) This function lets you specify a sprite instead of a path which may be difficult to determine in some circumstances. See also: sswf::Action::ACTION_SET_TARGET sswf::Action::ACTION_SET_TARGET2 sswf::Action::ACTION_WITH SWF Alexis' Reference—Get Target
  ACTION_ENUMERATE | Enumerate an object or an array. The ACTION_ENUMERATE action pops an object, stack a NULL and then stacks the object member names and corresponding values. This can be used with either an object or an array. In case of an array, the indices replace the member names. Unfortunately, what is being enumerated cannot as is be used to create a new object since there is no way to know how many entries have been enumerated without first going through the entire stack! Otherwise, the stack looks like what the sswf::Action::ACTION_DECLARE_OBJECT accepts as parameters. See also: sswf::Action::ACTION_DECLARE_ARRAY sswf::Action::ACTION_DECLARE_OBJECT sswf::Action::ACTION_ENUMERATE_OBJECT SWF Alexis' Reference—Enumerate
  ACTION_ADD_TYPED | Add according to the operand types. The ACTION_ADD_TYPED action pops two objects and add them according to their type. If both variables are strings, concatenate them. If one of the variables is a floating point, convert the other to a floating point if not already a floating point, then add them and put the addition result back on the stack. If both are integers, add them and put the result back on the stack. This is the prefered way to convert the + operator of ActionScript since it follows the ECMA specification. See also: sswf::Action::ACTION_ADD sswf::Action::ACTION_SUBTRACT SWF Alexis' Reference—Add (Typed)
  ACTION_LESS_THAN_TYPED | Compare according to the operand types. The ACTION_LESS_THAN_TYPED action pops two objects and compare them according to their type. This is the prefered way to convert the < operator of ActionScript since it follows the ECMA specification. See also: sswf::Action::ACTION_EQUAL sswf::Action::ACTION_EQUAL_TYPED sswf::Action::ACTION_STRICT_EQUAL sswf::Action::ACTION_LESS_THAN sswf::Action::ACTION_GREATER_THAN_TYPED sswf::Action::ACTION_LOGICAL_NOT sswf::Action::ACTION_LOGICAL_AND sswf::Action::ACTION_LOGICAL_OR SWF Alexis' Reference—Less Than (Typed)
  ACTION_EQUAL_TYPED | Compare according to the operand types. The ACTION_EQUAL_TYPED action pops two objects and compare them according to their type. This is the prefered way to convert the == operator of ActionScript since it follows the ECMA specification. See also: sswf::Action::ACTION_EQUAL sswf::Action::ACTION_STRICT_EQUAL sswf::Action::ACTION_LESS_THAN sswf::Action::ACTION_LESS_THAN_TYPED sswf::Action::ACTION_GREATER_THAN_TYPED sswf::Action::ACTION_LOGICAL_NOT sswf::Action::ACTION_LOGICAL_AND sswf::Action::ACTION_LOGICAL_OR SWF Alexis' Reference—Equal (Typed)
  ACTION_NUMBER | Converts an object to a number. The ACTION_NUMBER action calls the method valueOf() of the object on the stack and replaces that object with a number. If the operation fails, undefined is pushed on the stack. This is a good way to optimize a call to the valueOf() method of any object. Also, it works on internal types. See also: sswf::Action::ACTION_STRING sswf::Action::ACTION_CALL_METHOD SWF Alexis' Reference—Number
  ACTION_STRING | Converts an object to a string. The ACTION_STRING action calls the method toString() of the object on the stack and replaces that object with a string representing the object. If the operation fails, undefined is pushed on the stack. This is a good way to optimize a call to the toString() method of any object. Also, it works on internal types. See also: sswf::Action::ACTION_STRING sswf::Action::ACTION_CALL_METHOD SWF Alexis' Reference—String
  ACTION_DUPLICATE | Duplicate one element on the stack. The ACTION_DUPLICATE action pops one element from the stack and pushes it back twice. See also: sswf::Action::ACTION_POP sswf::Action::ACTION_SWAP SWF Alexis' Reference—Duplicate
  ACTION_SWAP | Swap the two last elements on the stack. The ACTION_SWAP action pops two elements from the stack and push them back the other way around. See also: sswf::Action::ACTION_POP sswf::Action::ACTION_SWAP SWF Alexis' Reference—Swap
  ACTION_GET_MEMBER | Read the value of an object member. The ACTION_GET_MEMBER action is similar to the sswf::Action::ACTION_GET_VARIABLE but looks within an object for the variable definition and content. The value of a member can be a function as well as a value. The member name can be an index when accessing an array. This action replaces the sswf::Action::ACTION_GET_PROPERTY which used a number to access a set of predefined member names. See also: sswf::Action::ACTION_SET_MEMBER sswf::Action::ACTION_GET_PROPERTY sswf::Action::ACTION_SET_PROPERTY sswf::Action::ACTION_GET_VARIABLE sswf::Action::ACTION_SET_VARIABLE sswf::Action::ACTION_SET_LOCAL_VARIABLE sswf::Action::ACTION_DELETE SWF Alexis' Reference—Get Member
  ACTION_SET_MEMBER | Write the value of an object member. The ACTION_SET_MEMBER action is similar to the sswf::Action::ACTION_SET_VARIABLE but creates the variable inside an object and that is called a member. The value of a member can be a function as well as a value. In case it is a function, it can then be called with the sswf::Action::ACTION_CALL_METHOD action. The member name can be an index when accessing an array. To get rid of a member, use the sswf::Action::ACTION_DELETE action. This action replaces the sswf::Action::ACTION_SET_PROPERTY which used a number to access a set of predefined member names. See also: sswf::Action::ACTION_GET_MEMBER sswf::Action::ACTION_GET_PROPERTY sswf::Action::ACTION_SET_PROPERTY sswf::Action::ACTION_GET_VARIABLE sswf::Action::ACTION_SET_VARIABLE sswf::Action::ACTION_SET_LOCAL_VARIABLE sswf::Action::ACTION_DELETE SWF Alexis' Reference—Set Member
  ACTION_INCREMENT | Add 1 to the value at the top of the stack. The ACTION_INCREMENT action adds one to the value on the stack. The stack is expected to be an integer or a floating point value. Another object will be converted to a number if possible. See also: sswf::Action::ACTION_DECREMENT SWF Alexis' Reference—Increment
  ACTION_DECREMENT | Subtract 1 from the value at the top of the stack. The ACTION_DECREMENT action subtracts one to the value on the stack. The stack is expected to be an integer or a floating point value. Another object will be converted to a number if possible. See also: sswf::Action::ACTION_DECREMENT SWF Alexis' Reference—Decrement
  ACTION_CALL_METHOD | Call a method on an object. The ACTION_CALL_METHOD action calls the named method of an object with the specified parameters. This is similar to the sswf::Action::ACTION_CALL_FUNCTION but it calls the function defined within an object instead. This means that the 'this' parameter will be defined in that function and it can be used to access the members of the object. A call always returns a value. If the method is declared as a function returning void (a procedure in effect), the function returns undefined. See also: sswf::Action::ACTION_CALL_FUNCTION sswf::Action::ACTION_NEW_METHOD sswf::Action::ACTION_NEW sswf::Action::ACTION_RETURN SWF Alexis' Reference—Call Method
  ACTION_NEW_METHOD | Create an object and call a constructor. The ACTION_NEW_METHOD action creates a new instance of an object and then initializes it by calling a constructor depending on its parameters (constructors can be overloaded in this case.) This is similar to the ACTION_NEW except that the proper overloaded constructor is called automatically. See also: sswf::Action::ACTION_CALL_FUNCTION sswf::Action::ACTION_NEW_METHOD sswf::Action::ACTION_NEW sswf::Action::ACTION_RETURN SWF Alexis' Reference—New Method
  ACTION_INSTANCE_OF | Check wether an object of an instance of a specified class. The ACTION_INSTANCE_OF action checks whether a given object was created from a given class. Since everything in SWF is an object (including a classes, interfaces, etc.), I'm not too sure how this works. I suppose they can keep a link to the original object used to create another and each object has a set of inheritance in case of multiple inheritance (which should only happen with interfaces.) See also: sswf::Action::ACTION_CAST_OBJECT sswf::Action::ACTION_TYPE_OF SWF Alexis' Reference—Instance Of
  ACTION_ENUMERATE_OBJECT | Enumerate an object or an array. The ACTION_ENUMERATE_OBJECT action pops an object, stacks a NULL and then stacks the object member names on the stack. This can be used with either an object or an array. In case of an array, the indices replace the member names. See also: sswf::Action::ACTION_DECLARE_ARRAY sswf::Action::ACTION_DECLARE_OBJECT sswf::Action::ACTION_ENUMERATE SWF Alexis' Reference—Enumerate Object
  ACTION_AND | Apply a bitwise AND between two numbers. The ACTION_AND action applies a bitwise AND between two integer numbers. The SWF player does not support bitwise AND between floating points. This is the & operator in ActionScript. See also: sswf::Action::ACTION_LOGICAL_AND sswf::Action::ACTION_LOGICAL_OR sswf::Action::ACTION_LOGICAL_NOT sswf::Action::ACTION_OR sswf::Action::ACTION_XOR SWF Alexis' Reference—And
  ACTION_OR | Apply a bitwise OR between two numbers. The ACTION_OR action applies a bitwise OR between two integer numbers. The SWF player does not support bitwise OR between floating points. This is the | operator in ActionScript. See also: sswf::Action::ACTION_LOGICAL_AND sswf::Action::ACTION_LOGICAL_OR sswf::Action::ACTION_LOGICAL_NOT sswf::Action::ACTION_AND sswf::Action::ACTION_XOR SWF Alexis' Reference—Or
  ACTION_XOR | Apply a bitwise XOR between two numbers. The ACTION_XOR action applies a bitwise XOR between two integer numbers. The SWF player does not support bitwise XOR between floating points. This is the ^ operator in ActionScript. See also: sswf::Action::ACTION_LOGICAL_AND sswf::Action::ACTION_LOGICAL_OR sswf::Action::ACTION_LOGICAL_NOT sswf::Action::ACTION_AND sswf::Action::ACTION_OR SWF Alexis' Reference—XOr
  ACTION_SHIFT_LEFT | Shift bits to the left. The ACTION_SHIFT_LEFT action shifts the bits of an integer to the left. The SWF player does not support shifting floating points. This is the << operator in ActionScript. See also: sswf::Action::ACTION_SHIFT_RIGHT SWF Alexis' Reference—Shift Left
  ACTION_SHIFT_RIGHT | Shift bits to the right. The ACTION_SHIFT_RIGHT action shifts the bits of an integer to the right. The integer is taken as a signed integer. This means that a negative integer remains negative and a positive integer remains positive. The SWF player does not support shifting floating points. This is the >> operator in ActionScript. See also: sswf::Action::ACTION_SHIFT_RIGHT SWF Alexis' Reference—Shift Right
  ACTION_SHIFT_RIGHT_UNSIGNED | Shift bits to the right. The ACTION_SHIFT_RIGHT_UNSIGNED action shifts the bits of an integer to the right. The integer is taken as an unsigned integer. This means that the most significant bits are cleared as the value is being shifted. The SWF player does not support shifting floating points. This is the >>> operator in ActionScript. See also: sswf::Action::ACTION_SHIFT_RIGHT SWF Alexis' Reference—Shift Right Unsigned
  ACTION_STRICT_EQUAL | Compare two objects without conversions. The ACTION_STRICT_EQUAL compare two objects without trying to convert one or the other so they match. For instance, 0 == "0" is considered true, but 0 === "0" is not. This action represents the === operation of ActionScript. See also: sswf::Action::ACTION_EQUAL sswf::Action::ACTION_EQUAL_TYPED sswf::Action::ACTION_LESS_THAN sswf::Action::ACTION_LESS_THAN_TYPED sswf::Action::ACTION_GREATER_THAN_TYPED sswf::Action::ACTION_LOGICAL_NOT sswf::Action::ACTION_LOGICAL_AND sswf::Action::ACTION_LOGICAL_OR SWF Alexis' Reference—Strict Equal
  ACTION_GREATER_THAN_TYPED | Compare according to the operand types. The ACTION_GREATER_THAN_TYPED action pops two objects and compare them according to their type. This is the prefered way to convert the > operator of ActionScript since it follows the ECMA specification. See also: sswf::Action::ACTION_EQUAL sswf::Action::ACTION_EQUAL_TYPED sswf::Action::ACTION_STRICT_EQUAL sswf::Action::ACTION_LESS_THAN sswf::Action::ACTION_LESS_THAN_TYPED sswf::Action::ACTION_LOGICAL_NOT sswf::Action::ACTION_LOGICAL_AND sswf::Action::ACTION_LOGICAL_OR SWF Alexis' Reference—Greater Than (Typed)
  ACTION_STRING_GREATER_THAN | Test whether two strings are ordered. The ACTION_STRING_GREATER_THAN pops two strings from the stack, compare them for order and pushes the result back on the stack. This action will ensure that two strings which represent numbers are still compared as strings and not numbers. Note: This action should not be used anymore. It was deprecated. Instead, you should use the ACTION_GREATER_THAN_TYPED action which ensures proper casting (as expected in the JavaScript reference—ECMA). See also: sswf::Action::ACTION_GREATER_THAN_TYPED sswf::Action::ACTION_STRING_EQUAL sswf::Action::ACTION_STRICT_EQUAL sswf::Action::ACTION_STRING_LESS_THAN SWF Alexis' Reference—String Greater Than
  ACTION_EXTENDS | Mark a class as the extension of another. The ACTION_EXTENDS action is used to define the inheritance of a class. It is used to implement the ActionScript:
        class A { ...};
        class B extends A { ... };
  See also: sswf::Action::ACTION_IMPLEMENTS SWF Alexis' Reference—Extends
  ACTION_GOTO_FRAME | Change the frame number of the playback. The ACTION_GOTO_FRAME action changes the frame number of the playback. This means the playback of the movie continues at the frame specified by the ACTION_GOTO_FRAME. The frame is hard coded in the action so this action is not usually very useful unless your frame number is a constant number. Use the sswf::Action::ACTION_GOTO_EXPRESSION instead to be able to use a variable frame number. See also: sswf::Action::ACTION_GOTO_LABEL sswf::Action::ACTION_GOTO_EXPRESSION SWF Alexis' Reference—Goto Frame
  ACTION_URL | Load the specified URL. The ACTION_URL action loads the specified URL. The target specifies how the new URL should be loaded. "_level1" means that the SWF movie is replaced. "_top" replaces the entire window. "_blank" opens a new window. A frame name will reload that frame. It is also possible to execute some Javascript code using the javascript: protocol instead of http or https. See also: sswf::Action::ACTION_URL2 SWF Alexis' Reference—Get URL
  ACTION_STORE_REGISTER | Store the value currently at the top of the stack in a register. The ACTION_STORE_REGISTER action saves the value currently at the top of the stack in the specified register. The value on the stack is not popped. The maximum register number varies depending on the version of the player and whether you are in a function or the global space. A register can later be read with an sswf::Action::ACTION_PUSH_DATA. See also: sswf::Action::ACTION_PUSH_DATA SWF Alexis' Reference—Store Register
  ACTION_DECLARE_DICTIONARY | Declare a special array of strings which can later be pushed on the stack. The ACTION_DECLARE_DICTIONARY action is a list of null terminated strings. These strings are numbered from 0 to 65534 and can later be pushed on the stack with an sswf::Action::ACTIO_PUSH_DATA. This is used to compress your movies. If the same rather long string needs to be pushed onto the stack many times, repeating it in each Push Data would generate a larger action script than putting it once in a dictionary and pushing it using the special "push a dictionary entry" feature. The gain can be very small. You need to measure the length of the string, the overhead of declaring a dictionary and the number of times a string is used. If used once, no dictionary is necessary. If the string is one character, using the dictionary will actually make you lose 1 byte per Push Data... See also: sswf::Action::ACTION_PUSH_DATA SWF Alexis' Reference—Declare Dictionary
  ACTION_STRICT_MODE | Whether the ActionScript engine is strict or not. The ACTION_STRICT_MODE action sets the strict mode flag to true or false. When the strict mode is true, more checks are done to ensure that the ActionScript running is more compliant to the ECMA specification. See also: sswf::Action::ACTION_PUSH_DATA SWF Alexis' Reference—Strict Mode
  ACTION_WAIT_FOR_FRAME | Wait for the specified frame. The ACTION_WAIT_FOR_FRAME action is an old action used to wait for a frame while loading on a slow modem and such. Thus you could know what was loaded to know whether you could display such and such sprite. Often, the actions to execute when the frame was finaly loaded is an sswf::Action::ACTION_BRANCH_ALWAYS which skips the actions to be executed when the frame was not yet loaded. There is now ways to check for the frame number and use a regular sswf::Action::ACTION_BRANCH_IF_TRUE action instead. See also: sswf::Action::ACTION_PUSH_DATA SWF Alexis' Reference—Wait for Frame
  ACTION_SET_TARGET | Apply actions to the specified sprite (or movie). The ACTION_SET_TARGET action is used to optimize the code or call a sub-function which apply functions on what is considered the current movie. This current movie is defined by name with this action. An empty name refer to the main movie (the root). When the name of a specific sprite is used, then that specific sprite functions are called. See also: sswf::Action::ACTION_GET_TARGET sswf::Action::ACTION_SET_TARGET2 sswf::Action::ACTION_WITH SWF Alexis' Reference—Set Target
  ACTION_GOTO_LABEL | Change the current frame in the playback system. The ACTION_GOTO_LABEL action requests the current sprite to now play starting at the named frame. A frame is named using the FrameLabel tag. See also: sswf::Action::ACTION_GOTO_EXPRESSION sswf::Action::ACTION_GOTO_FRAME SWF Alexis' Reference—Goto Label
  ACTION_WAIT_FOR_FRAME2 | Wait for the specified frame. The ACTION_WAIT_FOR_FRAME2 action pops one value from the stack. This value represents the frame it has to wait for. The action otherwise has a new of action it has to skip in case the frame was not reached yet. See also: sswf::Action::ACTION_WAIT_FOR_FRAME SWF Alexis' Reference—Wait for Frame (dynamic)
  ACTION_DECLARE_FUNCTION2 | Declare a function. The ACTION_DECLARE_FUNCTION2 action creates a user function with capabilities as defined in SWF version 7 (i.e. up to 255 registers to use instead of local variables and for temporary computations.) These functions can also pre-define a set of registers to the internal variables such as _root, _global and this. A function declared as void is not expected to return anything on the stack. Yet the caller will get an undefined value. A function not declared as void is expected to return a valid value with the use of the sswf::Action::ACTION_RETURN action. See also: sswf::Action::ACTION_DECLARE_FUNCTION sswf::Action::ACTION_CALL_FUNCTION sswf::Action::ACTION_RETURN sswf::Action::ACTION_CALL_METHOD sswf::Action::ACTION_NEW_METHOD sswf::Action::ACTION_NEW SWF Alexis' Reference—Declare Function (V7)
  ACTION_TRY | Create a try/catch/finaly block. The ACTION_TRY action is used to create a block of actions to execute safely. This means, if an exception occurs, it is possible to catch it. The entire block is composed of one try block, zero or more catch blocks and zero or one finaly block. There must be one catch or one finaly block. The finaly block is always executed. A catch block is executed only if the corresponding exception is caught. Note that internally, there is only one catch. Your compiler may decided to offer you a way to catch a specific type of exception by checking the type of the exception (see sswf::Action::ACTION_INSTANCE_OF). See also: sswf::Action::ACTION_THROW sswf::Action::ACTION_INSTANCE_OF SWF Alexis' Reference—Try
  ACTION_WITH | Create a With block. The ACTION_WITH action is a block of actions which react to object names by first searching the name specified by the With block. For instance, if you have an object named MyObject and you want to access the field NiceField in that object, you need to use the name:
        v = MyObject.NiceField
  In general this is not a problem, but when many fields need to be accessed, it is possible to optimize using a With block:
        With MyObject
          v = NiceField
  In this last case, the variable NiceField is first searched as a variable member in the MyObject object. Note that this technic works to read variable members and modify existing variable members. If you need to create a new member, you will need to specify the object name. Note: A With blocks can include another With block. Total there can be 20 levels of objects defined in this way. Extraneous levels will be ignored in V7 and earlier. It should be throwing an exception in V8 (not tested--according to Macromedia, it already throws in V7...) Bug: Note that can also create bugs since you may be accessing the member of an object when you wanted to access a global variable instead. See also: sswf::Action::ACTION_GET_MEMBER sswf::Action::ACTION_SET_MEMBER sswf::Action::ACTION_GET_PROPERTY sswf::Action::ACTION_SET_PROPERTY sswf::Action::ACTION_GET_VARIABLE sswf::Action::ACTION_SET_VARIABLE sswf::Action::ACTION_SET_LOCAL_VARIABLE sswf::Action::ACTION_DELETE sswf::Action::ACTION_SET_TARGET sswf::Action::ACTION_SET_TARGET2 SWF Alexis' Reference—With
  ACTION_PUSH_DATA | Push constants and register data on the stack. The ACTION_PUSH_DATA action defines a block of data to push on the stack. It is possible to push a constant string, boolean, integer, floating point, null and the undefined value. Also, it is possible to specify a register number to load. This is the only way you can load a register set with sswf::Action::ACTION_STORE_REGISTER. To read a variable, you first push its name on the stack using this action, then you use the sswf::Action::ACTION_GET_VARIABLE. See also: sswf::Action::ACTION_STORE_REGISTER sswf::Action::ACTION_GET_VARIABLE SWF Alexis' Reference—Push Data
  ACTION_BRANCH_ALWAYS | Change the current execution pointer. The ACTION_BRANCH_ALWAYS action changes the execution pointer by the specified number of bytes. The offset is a signed 16 bits value. This means the jump is limited to a 64Kb span. Note that most ActionScripts should anyway be limited to about 32Kb. See also: sswf::Action::ACTION_STORE_REGISTER sswf::Action::ACTION_GET_VARIABLE SWF Alexis' Reference—Branch Always
  ACTION_URL2 | Load the specified URL. The ACTION_URL2 action loads the specified URL. This is similar to ACTION_URL except that the URL itself is taken from the stack and thus can dynamically be defined (i.e. read from a variable, created using an expression, etc.) See also: sswf::Action::ACTION_URL SWF Alexis' Reference—Get Url2
  ACTION_DECLARE_FUNCTION | Declare a function. The ACTION_DECLARE_FUNCTION action creates a user function with capabilities as defined in SWF version 5. These functions do not support pre-set registers or more than 4 registers. A function declared as void is not expected to return anything on the stack. Yet the caller will get an undefined value. A function not declared as void is expected to return a valid value with the use of the sswf::Action::ACTION_RETURN action. See also: sswf::Action::ACTION_DECLARE_FUNCTION2 sswf::Action::ACTION_CALL_FUNCTION sswf::Action::ACTION_RETURN sswf::Action::ACTION_CALL_METHOD sswf::Action::ACTION_NEW_METHOD sswf::Action::ACTION_NEW SWF Alexis' Reference—Declare Function
  ACTION_BRANCH_IF_TRUE | Change the current execution pointer if true. The ACTION_BRANCH_IF_TRUE action branches if the value it pops from the stack represents true. A true number is a non-zero number. A true string is a non-empty string. Other objects may have a toBoolean() function which returns true or false according to their type. The same limitations apply to this branch as for the sswf::Action::ACTION_BRANCH_ALWAYS action. To branch when false, use the sswf::Action::ACTION_LOGICAL_NOT right before this branch. See also: sswf::Action::ACTION_LOGICAL_NOT sswf::Action::ACTION_BRANCH_ALWAYS sswf::Action::ACTION_CALL_FUNCTION sswf::Action::ACTION_RETURN sswf::Action::ACTION_CALL_METHOD sswf::Action::ACTION_NEW_METHOD sswf::Action::ACTION_NEW SWF Alexis' Reference—Branch If True
  ACTION_CALL_FRAME | Call the actions defined in a frame. The ACTION_CALL_FRAME action is an early bird function definition. You should use the sswf::Action::ACTION_DECLARE_FUNCTION and then an sswf::Action::ACTION_CALL_FUNCTION instead. This frame calling is nothing more than a function call, really. The name or number if the frame to call is popped from the stack. Bug: This tag takes a size of 0 since it does not need any data and yet it has a value over 127. See also: sswf::Action::ACTION_CALL_FUNCTION sswf::Action::ACTION_DECLARE_FUNCTION sswf::Action::ACTION_DECLARE_FUNCTION2 sswf::Action::ACTION_RETURN SWF Alexis' Reference—Call Frame
  ACTION_GOTO_EXPRESSION | Move the display pointer to the specified frame. The ACTION_GOTO_EXPRESSION action pops a string or integer from the stack and go to the frame. The action also specifies whether the movie should stop or play. See also: sswf::Action::ACTION_GOTO_FRAME sswf::Action::ACTION_GOTO_LABEL SWF Alexis' Reference—Goto Expression
  ACTION_max | The very last valid action. The ACTION_max definition is used to clamp action numbers valid in an SWF movie. Note that this is not the largest action number but instead the maximum action number which can possibly be accepted at all time (until the action scheme changes!) At this time this value is 255 which is inclusive. See also: sswf::Action::ACTION_min

## Constructor & Destructor Documentation

Action::Action | ( | TagBase * | tag,
|  | action_t | action |
| ) |  |  |

The Action constructor is used to initialize an action object.

Once an action was created, you cannot change its type. You cannot copy an action with the copy constructor or the assignment operator. You can however sswf::Action::Duplicate() an action.

The constructor will determine the version of the action. This is important to determine the minimum version necessary for that action to function in the output SWF animation.

At this time, you can add actions to any tags (but this may change!) However, only a few set of tags really support actions:

- Button
- DoAction
- DoInitAction

References ACTION_LABEL, ACTION_max, ACTION_min, sswf::assert(), f_min_version, and f_tag.

Referenced by Duplicate(), and Parse().

sswf::Action::~Action | ( | void |  | ) | `[inline, virtual]`

This function exists because the Action class defines virtual function. It has otherwise nothing to do here.

## Member Function Documentation

Action * Action::Duplicate | ( | void |  | ) | const`[virtual]`

This function creates a clone of 'this' Action.

The function knows how to create a new Action which is a clone of this Action.

Actions with extraneous data will overwrite this function and duplicate their extraneous data as required.

Note:
  This function needs to be used instead of the copy operator since depending on the type of action, the result will be different.

For example, if the action to duplicate is an ActionBranch you would need to do a new ActionBranch and not a new Action. The Duplicate function takes care of that for you.

Returns:
  A new action pointer

Reimplemented in sswf::ActionBranch, sswf::ActionDictionary, sswf::ActionFunction, sswf::ActionGoto, sswf::ActionLabel, sswf::ActionPushData, sswf::ActionSetTarget, sswf::ActionStoreRegister, sswf::ActionStrictMode, sswf::ActionTry, sswf::ActionURL, sswf::ActionWaitForFrame, and sswf::ActionWith.

References Action(), f_action, and f_tag.

Referenced by sswf::ActionWith::Duplicate(), sswf::ActionWaitForFrame::Duplicate(), sswf::ActionTry::Duplicate(), sswf::ActionFunction::Duplicate(), sswf::TagDoAction::SetAction(), and sswf::TagButton::SetAction().

ActionLabel * Action::FindLabel | ( | const Vectors & | list,
|  | const char * | label |
| ) |  |  | `[static]`

A special SSWF Action is the Label Action. The label action is NOT saved in the output SWF animation files. However, it is required to allow branches to jump from one place to another without the burden of using just offsets to know where the label would otherwise be.

The ActionBranch will search for labels.

Note:
  The SSWF implementation never allowed a branch to jump to a label defined outside of the block of actions where it (the branch) is defined. This conforms to version 6 of SWF.

Parameters:

  `[in]` | list | The list of actions to be searched
  `[in]` | label | The label to be searched

Returns:
  A pointer to an ActionLabel or NULL when not found

References ACTION_LABEL, sswf::Vectors::Count(), f_action, sswf::Vectors::Get(), and sswf::ActionLabel::GetLabel().

Referenced by sswf::ActionBranch::Save2ndPass().

ActionLabel * Action::FindLabelAtOffset | ( | Vectors & | list,
|  | unsigned long | offset |
| ) |  |  | `[static]`

Actions that branch from their current location to another location in the code use a signed offset.

Here we expect the offset to represent the exact destination (since we do not know the source action asking for the offset and depending on the action, the math varies.)

Since the point in the end is to have a label, this function creates the label and returns it.

Parameters:

  `[in]` | list | The list of actions to be searched.
  `[in]` | offset | The offset to be searched.

Returns:
  A pointer to an ActionLabel or NULL when not found.

References sswf::Vectors::Count(), f_offset, f_tag, sswf::Vectors::Get(), sswf::Vectors::Insert(), sswf::MemoryManager::MemAttach(), and sswf::ActionLabel::SetLabel().

Referenced by sswf::ActionBranch::Parse2ndPass().

int Action::GetMaximumRegister | ( | const Vectors & | list | ) | `[static]`

This function goes through the list of actions defined in the Vectors array and determines what the largest register used by any of the instructions is in that array.

This is necessary to determine the largest used register in a version 7 function (See Declare Function (V7).) Before version 7, there could only be 4 registers and you never had to determine which ones were used.

Parameters:

  `[in]` | list | A Vectors of actions

Returns:
  The largest register number or -1 if the list of actions does not use any register.

See also:
  sswf::Action::GetMaxRegister

References sswf::Vectors::Count(), f_action, sswf::Vectors::Get(), GetMaxRegister(), and SubList().

Referenced by sswf::ActionTry::GetMaxRegister().

int sswf::Action::GetMaxRegister | ( | void |  | ) | const`[inline, protected, virtual]`

This function goes through all the list and sub-lists of actions and retrieve the largest register currently in use.

Note:
  Objects with sub-lists accessible with the sswf::Action::SubList(void) function do not need to implement this GetMaxRegister() function.

See also:
  sswf::Action::GetMaximumRegister(const Vectors& list)

Reimplemented in sswf::ActionPushData, sswf::ActionStoreRegister, and sswf::ActionTry.

Referenced by GetMaximumRegister(), and sswf::ActionFunction::SaveData().

TagBase* sswf::Action::GetTag | ( | void |  | ) | const`[inline]`

References f_tag.

int Action::MinimumListVersion | ( | const Vectors & | list | ) | `[static]`

This function sweeps through all the actions found in an array and determines the minimum SWF version required for the script to run.

For instance, the 'New Method' action requires at least a version 5 Flash Player to work.

References sswf::Vectors::Count(), f_action, sswf::Vectors::Get(), SubList(), and Version().

Referenced by sswf::TagPlace::PreSave(), sswf::TagDoAction::PreSave(), sswf::TagButton::PreSave(), and sswf::ActionTry::Version().

unsigned long sswf::Action::Offset | ( | void |  | ) | const`[inline]`

The position of an action can be used to compute different offsets such as the ActionBranch offset to get the current ActionScript pointer to a specific position in the script.

Returns:
  The offset in bytes of this action

References f_offset.

Referenced by sswf::ActionBranch::Save2ndPass().

ErrorManager::error_code_t Action::OnError | ( | ErrorManager::error_code_t | errcode,
|  | const char * | message,
|  |  | ... |
| ) |  |  | const

This function calls the sswf::ErrorManager::OnError(error_code_t errcode, const char *message, va_list ap) function whenever possible.

The function will not be called if the action was not given a valid tag object pointer on creation.

Parameters:

  `[in]` | errcode | The error code that this call represents
  `[in]` | message | The message of this error
  `[in]` | ... | The parameters to the message

Returns:
  Usually the input errcode parameter

References f_tag, and sswf::TagBase::OnError().

Referenced by sswf::ActionPushData::ParseData(), sswf::ActionGoto::ParseData(), ParseData(), Save(), sswf::ActionBranch::Save2ndPass(), sswf::ActionWaitForFrame::SaveData(), sswf::ActionTry::SaveData(), sswf::ActionPushData::SaveData(), sswf::ActionGoto::SaveData(), sswf::ActionFunction::SaveData(), SaveData(), and SaveList().

ErrorManager::error_code_t Action::Parse | ( | TagBase * | tag,
|  | const Data & | data,
|  | Vectors & | actions |
| ) |  |  | `[static]`

This function parses the data buffer for one action.

It is expected that the end of the buffer was not reached yet.

In general, you will call the ParseList() function to parse all the actions found in a Data buffer.

Parameters:

  `[in]` | tag | The action are being read for this tag
  `[in]` | data | The Data buffer being parsed
  `[in]` | actions | The resulting vector of actions

Returns:
  An error code or ErrorManager::ERROR_CODE_NONE

References Action(), ACTION_BRANCH_ALWAYS, ACTION_BRANCH_IF_TRUE, ACTION_CALL_FRAME, ACTION_DECLARE_DICTIONARY, ACTION_DECLARE_FUNCTION, ACTION_DECLARE_FUNCTION2, ACTION_GOTO_EXPRESSION, ACTION_GOTO_FRAME, ACTION_GOTO_LABEL, ACTION_PUSH_DATA, ACTION_SET_TARGET, ACTION_STORE_REGISTER, ACTION_STRICT_MODE, ACTION_TRY, ACTION_URL, ACTION_URL2, ACTION_WAIT_FOR_FRAME, ACTION_WAIT_FOR_FRAME2, ACTION_WITH, sswf::ErrorManager::ERROR_CODE_NONE, sswf::ErrorManager::ERROR_CODE_UNKNOWN_ACTION, f_offset, sswf::Data::GetByte(), sswf::Data::GetReadPosition(), sswf::Data::GetShort(), ParseData(), and sswf::Vectors::Set().

Referenced by sswf::ActionWaitForFrame::ParseData(), and ParseList().

ErrorManager::error_code_t Action::Parse2ndPass | ( | Vectors & | list | ) | `[protected, virtual]`

This function is used to fix the different branches after a load.

Parameters:

  `[in]` | list | The vector of actions to tweak as required.

Returns:
  The error code ErrorManager::ERROR_CODE_NONE.

Reimplemented in sswf::ActionBranch.

References sswf::ErrorManager::ERROR_CODE_NONE.

ErrorManager::error_code_t Action::ParseData | ( | const Data & | data | ) | `[protected, virtual]`

All the actions having a byte code larger than 127 include extra-data.

These actions need to overload this function and load that extraneous data when requested to do so.

The default function asserts.

Note:
  This function is not a pure virtual because actions with a byte code of 0 to 127 do not need to be derived.

Parameters:

  `[in]` | data | The Data buffer where the extraneous information is to be loaded from.

Returns:
  The error code ErrorManager::ERROR_CODE_INTERNAL_ERROR.

Reimplemented in sswf::ActionBranch, sswf::ActionCallFrame, sswf::ActionDictionary, sswf::ActionFunction, sswf::ActionGoto, sswf::ActionPushData, sswf::ActionSetTarget, sswf::ActionStoreRegister, sswf::ActionStrictMode, sswf::ActionTry, sswf::ActionURL, sswf::ActionWaitForFrame, and sswf::ActionWith.

References sswf::assert(), sswf::ErrorManager::ERROR_CODE_INTERNAL_ERROR, f_action, and OnError().

Referenced by Parse().

ErrorManager::error_code_t Action::ParseList | ( | TagBase * | tag,
|  | const Data & | data,
|  | Vectors & | actions |
| ) |  |  | `[static]`

This function reads actions from the specified Data buffer until the end of the buffer is reached.

When reading data in a nested list, the data buffer will be constrained to the size of the nested list using the limit function.

The only exceptions are the ACTION_WAIT_FOR_FRAME and ACTION_WAIT_FOR_FRAME2 that uses a count instead of a size. For these special cases, the ParseData() function handles it by directly calling Parse() 'count' times.

Note:
  It is your responsibility to clear the vector of actions if necessary.

Parameters:

  `[in]` | tag | The action are being read for this tag
  `[in]` | data | The Data buffer being parsed
  `[in]` | actions | The resulting vector of actions

Returns:
  An error code or ErrorManager::ERROR_CODE_NONE

References sswf::ErrorManager::ERROR_CODE_NONE, sswf::Data::IsEndOfData(), and Parse().

Referenced by sswf::ActionWith::ParseData(), sswf::ActionTry::ParseData(), sswf::ActionFunction::ParseData(), sswf::TagDoAction::ParseTag(), and sswf::TagButton::ParseTag().

ErrorManager::error_code_t Action::Save | ( | Data & | data | ) |

This function saves 'this' Action in the specified Data buffer.

Simple actions have their byte code saved and the function returns.

Composed actions have their SaveData() virtual function called.

Also, actions which can include sub-ations (such as a Function or a With action) get their SubList() saved as well.

The result in an SWF animation just looks like a long list of byte codes. The reality is that this technique generates blocks of actions.

Parameters:

  `[in]` | data | The data buffer where the actions need to be saved

References sswf::Data::Append(), sswf::Data::ByteSize(), sswf::ErrorManager::ERROR_CODE_ACTION_OVERFLOW, sswf::ErrorManager::ERROR_CODE_NONE, f_action, sswf::Data::GetSize(), sswf::ErrorManager::KeepFirst(), OnError(), sswf::Data::PutByte(), sswf::Data::PutShort(), SaveData(), SaveList(), sswf::Data::SetSize(), and SubList().

Referenced by SaveList().

ErrorManager::error_code_t Action::Save2ndPass | ( | const Vectors & | list,
|  | Data & | data |
| ) |  |  | `[protected, virtual]`

This function is called after all the actions have been saved in a list of actions (i.e. sswf::Action::SaveList() calls sswf::Action::Save() on all the actions of a list and then sswf::Action::Save2ndPass().)

At this time, the only action which requires this second pass is the sswf::ActionBranch. It will search for a label and save the proper offset from itself to the label.

Bug:
  The Data buffer should not be grown by the Save2ndPass(). Instead it should be tweaked (i.e. some bytes overwritten as required.)

Parameters:

  `[in]` | list | The list of all the actions being saved
  `[in]` | data | The Data buffer where the actions were saved

Returns:
  The error code ErrorManager::ERROR_CODE_NONE.

Reimplemented in sswf::ActionBranch.

References sswf::ErrorManager::ERROR_CODE_NONE.

Referenced by SaveList().

ErrorManager::error_code_t Action::SaveData | ( | Data & | data,
|  | Data & | nested_data |
| ) |  |  | `[protected, virtual]`

All the actions having a byte code larger than 127 include extra-data.

These actions need to overload this function and save that extraneous data when requested to do so.

The default function asserts.

Note:
  This function is not a pure virtual because actions with a byte code of 0 to 127 do not need to be derived.

Parameters:

  `[in]` | data | The Data buffer where the extraneous information is to be saved.
  `[in]` | nested_data | When the action supports sub-actions, the Data buffer where these sub-actions have been saved.

Returns:
  The error code ErrorManager::ERROR_CODE_INTERNAL_ERROR.

Reimplemented in sswf::ActionBranch, sswf::ActionCallFrame, sswf::ActionDictionary, sswf::ActionFunction, sswf::ActionGoto, sswf::ActionPushData, sswf::ActionSetTarget, sswf::ActionStoreRegister, sswf::ActionStrictMode, sswf::ActionTry, sswf::ActionURL, sswf::ActionWaitForFrame, and sswf::ActionWith.

References sswf::assert(), sswf::ErrorManager::ERROR_CODE_INTERNAL_ERROR, f_action, and OnError().

Referenced by Save().

ErrorManager::error_code_t Action::SaveList | ( | const Vectors * | list,
|  | Data & | data,
|  | const Vectors * | extra = `0` |
| ) |  |  |

This function is used to save a list of actions in a Data buffer for output in a Flash animation.

Parameters:

  `[in]` | list | The list of actions to be saved, it can be NULL
  `[in]` | data | The Data buffer where the result is saved
  `[in]` | extra | Another list of actions saved after the 'list' of actions, usually is NULL

Returns:
  0 when no error occured, non-zero otherwise

References ACTION_END, ACTION_LABEL, sswf::Data::ByteSize(), sswf::Vectors::Count(), sswf::ErrorManager::ERROR_CODE_ENDED_ACTION_SCRIPT, sswf::ErrorManager::ERROR_CODE_NONE, f_action, f_offset, sswf::Vectors::Get(), sswf::ErrorManager::KeepFirst(), OnError(), sswf::Data::PutByte(), Save(), and Save2ndPass().

Referenced by sswf::TagPlace::Save(), sswf::TagDoAction::Save(), sswf::TagButton::Save(), Save(), and sswf::ActionTry::SaveData().

ErrorManager::error_code_t Action::SaveString | ( | Data & | data,
|  | const char * | string |
| ) |  |  | `[protected]`

This functions saves a string in the Data buffer in a way that the SWF actions can read it.

The function simply calls the SaveString() of the corresponding tag thus converting the string as required for a version 5 or earlier movie. Strings are otherwise expected to be in UTF-8.

Parameters:

  `[in]` | data | The Data buffer where the string is to be saved
  `[in]` | string | The string to save in the Data buffer

Returns:
  The size of the string not including the null terminator, or -1 if the function failed

References f_tag, and sswf::TagBase::SaveString().

Referenced by sswf::ActionURL::SaveData(), sswf::ActionTry::SaveData(), sswf::ActionSetTarget::SaveData(), sswf::ActionPushData::SaveData(), sswf::ActionGoto::SaveData(), sswf::ActionFunction::SaveData(), and sswf::ActionDictionary::SaveData().

Vectors * Action::SubList | ( | void |  | ) | `[virtual]`

By default, this function returns a NULL pointer. Actions which support sub-actions (such as a ActionFunction or ActionWith) will return their array of sub-actions.

Returns:
  A pointer to a list of actions or NULL

Reimplemented in sswf::ActionFunction, sswf::ActionWaitForFrame, and sswf::ActionWith.

Referenced by GetMaximumRegister(), MinimumListVersion(), and Save().

TagBase * sswf::Action::Tag | ( | void |  | ) | const`[inline, protected]`

This function returns the pointer to the tag this action was created in (see the constructor!).

Returns:
  The pointer of the tag this action was created in

See also:
  sswf::Action::Action(TagBase *tag, action_t action);

References f_tag.

Referenced by sswf::ActionWith::Duplicate(), sswf::ActionWaitForFrame::Duplicate(), sswf::ActionURL::Duplicate(), sswf::ActionTry::Duplicate(), sswf::ActionStrictMode::Duplicate(), sswf::ActionStoreRegister::Duplicate(), sswf::ActionSetTarget::Duplicate(), sswf::ActionPushData::Duplicate(), sswf::ActionLabel::Duplicate(), sswf::ActionGoto::Duplicate(), sswf::ActionFunction::Duplicate(), sswf::ActionDictionary::Duplicate(), sswf::ActionBranch::Duplicate(), sswf::ActionWith::ParseData(), sswf::ActionWaitForFrame::ParseData(), sswf::ActionTry::ParseData(), sswf::ActionFunction::ParseData(), sswf::ActionWaitForFrame::SaveData(), and sswf::ActionGoto::SaveData().

unsigned char sswf::Action::Version | ( | void |  | ) | const`[inline, virtual]`

The minimum version required for any action is defined on creation of the action. The sswf::Action::Action(TagBase *tag, action_t action) function has a table which tells it the minimum SWF version required for such and such action to work thus you can query this value at any time.

Returns:
  The minimum version required for this action to work

Reimplemented in sswf::ActionTry.

References f_min_version.

Referenced by MinimumListVersion().

## Member Data Documentation

const action_t sswf::Action::f_action`[protected]`

This variable member holds the action code of this action. It is currently read-only since changing it would require changes to the minimum version and size information.

Referenced by sswf::ActionFunction::AddParameter(), sswf::ActionWaitForFrame::Duplicate(), sswf::ActionURL::Duplicate(), sswf::ActionGoto::Duplicate(), sswf::ActionFunction::Duplicate(), sswf::ActionBranch::Duplicate(), Duplicate(), FindLabel(), GetMaximumRegister(), MinimumListVersion(), sswf::ActionWaitForFrame::ParseData(), sswf::ActionURL::ParseData(), sswf::ActionGoto::ParseData(), sswf::ActionFunction::ParseData(), ParseData(), Save(), sswf::ActionWaitForFrame::SaveData(), sswf::ActionURL::SaveData(), sswf::ActionGoto::SaveData(), sswf::ActionFunction::SaveData(), SaveData(), and SaveList().

unsigned char sswf::Action::f_min_version`[private]`

Referenced by Action(), and Version().

unsigned long sswf::Action::f_offset`[protected]`

This offset defines the position at which the action was inserted in the Data buffer while in the sswf::Action::Save() function.

Bug:
  This offset is not defined until the sswf::Action::Save() function reaches this specific action in its list of actions. This is why there is a sswf::Action::Save2ndPass() so the ActionBranch action can properly calculate forward references.

Referenced by FindLabelAtOffset(), Offset(), Parse(), sswf::ActionBranch::ParseData(), sswf::ActionBranch::Save2ndPass(), and SaveList().

TagBase* sswf::Action::f_tag`[private]`

Referenced by Action(), Duplicate(), FindLabelAtOffset(), GetTag(), OnError(), SaveString(), and Tag().

The documentation for this class was generated from the following files:

- libsswf.h
- libsswf_actions.c++