Main Page   Namespace List   Class Hierarchy   Compound List   File List   Compound Members   File Members  

FAction.h

Go to the documentation of this file.
00001 #ifndef FACTION_H_FILE
00002 #define FACTION_H_FILE
00003 
00004 #include <iostream>
00005 #include <strstream>
00006 #include <vector>
00007 
00008 #include "FBase.h"
00009 
00010 class FlashActionRecord
00011 {
00012 public:
00013         FlashActionRecord() : m_size(0) {}
00014         ~FlashActionRecord() { }
00015 
00016         virtual void Write(std::ostream &out) { WriteHeader(out,m_size); out.write(unknowndata,m_size); }
00017         
00018         virtual void Read(std::istream &in) { ReadHeader(in); if(m_size != 0) { unknowndata = (char *)malloc(m_size+1); gcstrings.push_back(unknowndata); in.read(unknowndata,m_size); } }
00019 protected:
00020         void WriteHeader(std::ostream &out, UWORD size=0);
00021         void ReadHeader(std::istream &in)  { m_code = in.get(); if(m_code < 0x80) return; READ_UWORD(m_size); }
00022         
00023         char *unknowndata;
00024         gc_vector<char*> gcstrings;
00025         
00026         UWORD m_code;
00027         UWORD m_size;
00028 };
00029 
00030 
00031 
00032 //ACTION WITH NO PARAMS
00033 #define DECLARE_SIMPLE_ACTION_CLASS(ActionName, ActionID)               \
00034 class ActionName : public FlashActionRecord                                             \
00035 {                                                                                                                               \
00036 public:                                                                                                                 \
00037         ActionName() { m_code=ActionID; }                                                       \
00038         ~ActionName() {}                                                                                        \
00039         virtual void Write(std::ostream &out) { WriteHeader(out); }     \
00040 private:                                                                                                                \
00041 };
00042 //ACTION WITH WORD PARAM
00043 #define DECLARE_SIMPLE_ACTION_CLASS2(ActionName, ActionID, pName)       \
00044 class ActionName : public FlashActionRecord                                                     \
00045 {                                                                                                                                       \
00046 public:                                                                                                                         \
00047         ActionName(SWORD pName) : data(pName) { m_code=ActionID; }              \
00048         ~ActionName() {}                                                                                                \
00049         virtual void Write(std::ostream &out) { WriteHeader(out,2);             \
00050                                                                                         WRITE_SWORD(data); }    \
00051         SWORD Get##pName() { return data; }                                                             \
00052         virtual void Read(std::istream &in) { ReadHeader(in); READ_SWORD(data); } \
00053 private:                                                                                                                        \
00054         ActionName() {}                                                                                                 \
00055         friend class FlashActionVectorImporter;                                         \
00056         SWORD data;                                                                                                             \
00057 };
00058 
00059 //ACTION WITH STRING PARAM
00060 #define DECLARE_SIMPLE_ACTION_CLASS3(ActionName, ActionID, pName)                                       \
00061 class ActionName : public FlashActionRecord                                                                                     \
00062 {                                                                                                                                                                       \
00063 public:                                                                                                                                                         \
00064         ActionName(char *pName) : data(pName), remove(false) { m_code=ActionID; }                               \
00065         ~ActionName() { if(remove) free(data); }                                                                                                                                \
00066         virtual void Write(std::ostream &out) { WriteHeader(out,strlen(data)+1);                \
00067                                                                                         out << data; out.put((char)0); }                        \
00068         const char *Get##pName() { return data; }                                                               \
00069         virtual void Read(std::istream &in) { ReadHeader(in); remove = true; std::vector<char> str; unsigned int i;     while((i = in.get()) != 0)      { str.push_back((char)i); } data = (char*)malloc(str.size()+1); i=0; for(;i < str.size(); i++) { data[i]=str[i]; }      data[i]=0; } \
00070 private:                                                                                                                                                        \
00071     ActionName() : remove(false) {}                                                                                                     \
00072         bool remove;                                                   \
00073         friend class FlashActionVectorImporter;                                         \
00074         char *data;                                                                                                                             \
00075 };
00076 //ACTION WITH BYTE PARAM
00077 #define DECLARE_SIMPLE_ACTION_CLASS4(ActionName, ActionID, pName)       \
00078 class ActionName : public FlashActionRecord                                                     \
00079 {                                                                                                                                       \
00080 public:                                                                                                                         \
00081         ActionName(char pName) : data(pName) { m_code=ActionID; }               \
00082         ~ActionName() {}                                                                                                \
00083         virtual void Write(std::ostream &out) { WriteHeader(out,1);             \
00084                                                                                         out.put(data); }                        \
00085         char Get##pName() { return data; }                                                              \
00086         virtual void Read(std::istream &in) { ReadHeader(in); data=in.get(); } \
00087 private:                                                                                                                        \
00088         ActionName() {}                                                                                                 \
00089         friend class FlashActionVectorImporter;                                         \
00090         char data;                                                                                                              \
00091 };
00092 
00093 /* FLASH 3.0 SIMPLE ACTIONS */
00094 DECLARE_SIMPLE_ACTION_CLASS(FlashActionNextFrame,0x04);
00095 DECLARE_SIMPLE_ACTION_CLASS(FlashActionPreviousFrame,0x05);
00096 DECLARE_SIMPLE_ACTION_CLASS(FlashActionPlay,0x06);
00097 DECLARE_SIMPLE_ACTION_CLASS(FlashActionStop,0x07);
00098 DECLARE_SIMPLE_ACTION_CLASS(FlashActionToggleQuality,0x08);
00099 DECLARE_SIMPLE_ACTION_CLASS(FlashActionStopSounds,0x09);
00100 DECLARE_SIMPLE_ACTION_CLASS2(FlashActionGotoFrame,0x81,frame);
00101 DECLARE_SIMPLE_ACTION_CLASS3(FlashActionSetTarget,0x8B,target);
00102 DECLARE_SIMPLE_ACTION_CLASS3(FlashActionGotoLabel,0x8C,label);
00103 
00104 /* FLASH 3.0 COMPLEX ACTIONS */
00105 class FlashActionGetURL : public FlashActionRecord                                                                                      
00106 {                                                                                                                                                                       
00107 public:
00108         FlashActionGetURL(char *url, char *target) : data1(url), data2(target) { m_code=0x83; }
00109         ~FlashActionGetURL() 
00110         { 
00111         }
00112 
00113         
00114         virtual void Write(std::ostream &out) { WriteHeader(out,strlen(data1)+strlen(data2)+2);
00115                                                                                         out << data1; out.put((char)0);
00116                                                                                         out << data2; out.put((char)0);}
00117         
00118         const char *GetURL(void) { return data1; }
00119         const char *GetTarget(void) { return data2; }
00120 
00121         virtual void Read(std::istream &in) 
00122         {       
00123                 ReadHeader(in);
00124                 std::vector<char> str; 
00125                 unsigned int i; 
00126                 while((i  = in.get()) != 0)     
00127                 { 
00128                         str.push_back((char)i); 
00129                 } 
00130                 data1 = (char*)malloc(str.size()+1); 
00131                 i=0; 
00132                 for(;i < str.size(); i++) 
00133                 { 
00134                         data1[i]=str[i]; 
00135                 }       
00136                 data1[i]=0; 
00137                 
00138                 std::vector<char> str2; 
00139                 unsigned int i2;
00140                 while((i2 = in.get()) != 0)     
00141                 { 
00142                         str2.push_back((char)i2); 
00143                 } 
00144                 data2 = (char*)malloc(str2.size()+1); 
00145                 i2=0; 
00146                 for(;i2 < str2.size(); i2++) 
00147                 { 
00148                         data2[i2]=str2[i2]; 
00149                 }       
00150                 data2[i2]=0;
00151                 gcstrings.push_back(data1);
00152                 gcstrings.push_back(data2);
00153         }
00154 private:
00155         gc_vector<char *> gcstrings;
00156         FlashActionGetURL() {}                                                                                                  
00157         friend class FlashActionVectorImporter;                                         
00158         char *data1;
00159         char *data2;
00160 };
00161 
00162 class FlashActionWaitForFrame : public FlashActionRecord                                                                                        
00163 {                                                                                                                                                                       
00164         FlashActionWaitForFrame(SWORD frame, char skipcount) : data1(frame), data2(skipcount) { m_code=0x8A; }                                  
00165         ~FlashActionWaitForFrame() {}                                                                                                                                   
00166         virtual void Write(std::ostream &out) { WriteHeader(out,3);
00167                                                                                         WRITE_SWORD(data1);
00168                                                                                         out.put((char)data2);}
00169         virtual void Read(std::istream &in) { ReadHeader(in); READ_SWORD(data1); data2 = in.get(); }
00170         SWORD GetFrame(void) { return data1; }
00171         char GetSkipCount(void) { return data2; }
00172 private:        
00173         FlashActionWaitForFrame() {}
00174         friend class FlashActionVectorImporter;
00175 
00176         SWORD data1;
00177         char data2;
00178 };
00179 
00180 /* FLASH 4.0 SIMPLE ACTIONS */
00181 DECLARE_SIMPLE_ACTION_CLASS(FlashActionAdd,0x0A);
00182 DECLARE_SIMPLE_ACTION_CLASS(FlashActionSubtract,0x0B);
00183 DECLARE_SIMPLE_ACTION_CLASS(FlashActionMultiply,0x0C);
00184 DECLARE_SIMPLE_ACTION_CLASS(FlashActionDivide,0x0D);
00185 DECLARE_SIMPLE_ACTION_CLASS(FlashActionEquals,0x0E);
00186 DECLARE_SIMPLE_ACTION_CLASS(FlashActionLess,0x0F);
00187 DECLARE_SIMPLE_ACTION_CLASS(FlashActionAnd,0x10);
00188 DECLARE_SIMPLE_ACTION_CLASS(FlashActionOr,0x11);
00189 DECLARE_SIMPLE_ACTION_CLASS(FlashActionNot,0x12);
00190 DECLARE_SIMPLE_ACTION_CLASS(FlashActionStringEquals,0x13);
00191 DECLARE_SIMPLE_ACTION_CLASS(FlashActionStringLength,0x14);
00192 DECLARE_SIMPLE_ACTION_CLASS(FlashActionStringExtract,0x15);
00193 DECLARE_SIMPLE_ACTION_CLASS(FlashActionPop,0x17);
00194 DECLARE_SIMPLE_ACTION_CLASS(FlashActionToInteger,0x18);
00195 DECLARE_SIMPLE_ACTION_CLASS(FlashActionGetVariable,0x1C);
00196 DECLARE_SIMPLE_ACTION_CLASS(FlashActionSetVariable,0x1D);
00197 DECLARE_SIMPLE_ACTION_CLASS(FlashActionSetTarget2,0x20);
00198 DECLARE_SIMPLE_ACTION_CLASS(FlashActionGetProperty,0x22);
00199 DECLARE_SIMPLE_ACTION_CLASS(FlashActionSetProperty,0x23);
00200 DECLARE_SIMPLE_ACTION_CLASS(FlashActionCloneSprite,0x24);
00201 DECLARE_SIMPLE_ACTION_CLASS(FlashActionRemoveSprite,0x25);
00202 DECLARE_SIMPLE_ACTION_CLASS(FlashActionTrace,0x26);
00203 DECLARE_SIMPLE_ACTION_CLASS(FlashActionStartDrag,0x27);
00204 DECLARE_SIMPLE_ACTION_CLASS(FlashActionEndDrag,0x28);
00205 DECLARE_SIMPLE_ACTION_CLASS(FlashActionStringAdd,0x21);
00206 DECLARE_SIMPLE_ACTION_CLASS(FlashActionStringLess,0x29);
00207 DECLARE_SIMPLE_ACTION_CLASS(FlashActionRandomNumber,0x30);
00208 DECLARE_SIMPLE_ACTION_CLASS(FlashActionMBStringLength,0x31);
00209 DECLARE_SIMPLE_ACTION_CLASS(FlashActionCharToAscii,0x32);
00210 DECLARE_SIMPLE_ACTION_CLASS(FlashActionAsciiToChar,0x33);
00211 DECLARE_SIMPLE_ACTION_CLASS(FlashActionGetTime,0x34);
00212 DECLARE_SIMPLE_ACTION_CLASS(FlashActionMBCharToAscii,0x36);
00213 DECLARE_SIMPLE_ACTION_CLASS(FlashActionMBStringExtract,0x35);
00214 DECLARE_SIMPLE_ACTION_CLASS(FlashActionMBAsciToChar,0x37);
00215 DECLARE_SIMPLE_ACTION_CLASS4(FlashActionWaitForFrame2,0x8D, skipcount);
00216 DECLARE_SIMPLE_ACTION_CLASS2(FlashActionJump,0x99,offset);
00217 DECLARE_SIMPLE_ACTION_CLASS4(FlashActionGetURL2,0x9A,method);
00218 DECLARE_SIMPLE_ACTION_CLASS2(FlashActionIf,0x9D,offset);
00219 DECLARE_SIMPLE_ACTION_CLASS(FlashActionCall,0x9E);
00220 DECLARE_SIMPLE_ACTION_CLASS4(FlashActionGotoFrame2,0x9F,play);
00221 
00222 /* FLASH 4.0 COMPLEX ACTIONS */
00223 class FlashActionPush : public FlashActionRecord
00224 {
00225 public:
00226         FlashActionPush(char _type, char *_data, UWORD _len) : type(_type), data(_data), len(_len) { m_code = 0x96;}
00227         ~FlashActionPush() { }
00228 
00229         virtual void Write(std::ostream &out);
00230         virtual void Read(std::istream &in);
00231 
00232         char GetType() { return type; }
00233         virtual UWORD GetDataSize() { return len; }
00234         virtual const char *GetData() { return data; }
00235 protected:
00236         FlashActionPush() {};
00237 private:
00238         friend class FlashActionVectorImporter;
00239         gc_vector<char*> gcstrings;
00240         char type;
00241         char *data;
00242         UWORD len;
00243 };
00244 
00245 
00246 /* FLASH 5.0 SIMPLE ACTIONS */
00247 DECLARE_SIMPLE_ACTION_CLASS(FlashActionDelete,0x3a);
00248 DECLARE_SIMPLE_ACTION_CLASS(FlashActionDelete2,0x3b);
00249 DECLARE_SIMPLE_ACTION_CLASS(FlashActionDefineLocal,0x3c);
00250 DECLARE_SIMPLE_ACTION_CLASS(FlashActionCallFunction,0x3d);
00251 DECLARE_SIMPLE_ACTION_CLASS(FlashActionReturn,0x3e);
00252 DECLARE_SIMPLE_ACTION_CLASS(FlashActionModulo,0x3f);
00253 DECLARE_SIMPLE_ACTION_CLASS(FlashActionNewObject,0x40);
00254 DECLARE_SIMPLE_ACTION_CLASS(FlashActionDefineLocal2,0x41);
00255 DECLARE_SIMPLE_ACTION_CLASS(FlashActionInitArray,0x42);
00256 DECLARE_SIMPLE_ACTION_CLASS(FlashActionInitObject,0x42);
00257 DECLARE_SIMPLE_ACTION_CLASS(FlashActionTypeOf,0x44);
00258 DECLARE_SIMPLE_ACTION_CLASS(FlashActionTargetPath,0x45);
00259 DECLARE_SIMPLE_ACTION_CLASS(FlashActionEnumerate,0x46);
00260 DECLARE_SIMPLE_ACTION_CLASS(FlashActionAdd2,0x47);
00261 DECLARE_SIMPLE_ACTION_CLASS(FlashActionLess2,0x48);
00262 DECLARE_SIMPLE_ACTION_CLASS(FlashActionEquals2,0x49);
00263 DECLARE_SIMPLE_ACTION_CLASS(FlashActionToNumber,0x4a);
00264 DECLARE_SIMPLE_ACTION_CLASS(FlashActionToString,0x4b);
00265 DECLARE_SIMPLE_ACTION_CLASS(FlashActionPushDuplicate,0x4c);
00266 DECLARE_SIMPLE_ACTION_CLASS(FlashActionStackSwap,0x4d);
00267 DECLARE_SIMPLE_ACTION_CLASS(FlashActionGetMember,0x4e);
00268 DECLARE_SIMPLE_ACTION_CLASS(FlashActionSetMember,0x4f);
00269 DECLARE_SIMPLE_ACTION_CLASS(FlashActionIncrement,0x50);
00270 DECLARE_SIMPLE_ACTION_CLASS(FlashActionDecrement,0x51);
00271 DECLARE_SIMPLE_ACTION_CLASS(FlashActionCallMethod,0x52);
00272 DECLARE_SIMPLE_ACTION_CLASS(FlashActionNewMethod,0x53);
00273 DECLARE_SIMPLE_ACTION_CLASS(FlashActionBitAnd,0x60);
00274 DECLARE_SIMPLE_ACTION_CLASS(FlashActionBitOr,0x61);
00275 DECLARE_SIMPLE_ACTION_CLASS(FlashActionBitXor,0x62);
00276 DECLARE_SIMPLE_ACTION_CLASS(FlashActionBitLShift,0x63);
00277 DECLARE_SIMPLE_ACTION_CLASS(FlashActionBitRShift,0x64);
00278 DECLARE_SIMPLE_ACTION_CLASS(FlashActionBitURShift,0x65);
00279 DECLARE_SIMPLE_ACTION_CLASS4(FlashActionStoreRegister,0x87,registernumber);
00280 
00281 /* FLASH 5.0 COMPLEX ACTIONS */
00282 
00283 class FlashActionDefineFunction : public FlashActionRecord
00284 {
00285 public: 
00286         FlashActionDefineFunction(char *function ...); 
00287                 // Function Name, Arg1, Arg2, ... Arg n
00288         ~FlashActionDefineFunction();
00289         
00290         virtual void Write(std::ostream &out);
00291         virtual void Read(std::istream &in);
00292 
00293         void AddAction(FlashActionRecord *r);
00294 private:
00295         FlashActionDefineFunction() {}
00296 
00297         friend class FlashActionVectorImporter;
00298         char *m_functionName;
00299         UWORD m_numParams;      
00300         std::vector<char *> m_paramNames;
00301         std::vector<FlashActionRecord *> m_actions;
00302         gc_vector<char *> m_gcstrings;
00303         gc_vector<FlashActionRecord *> records_delete;
00304 };
00305 
00306 class FlashActionWith : public FlashActionRecord
00307 {
00308 public: 
00309         FlashActionWith() {}
00310         ~FlashActionWith() { }
00311         
00312         virtual void Write(std::ostream &out);
00313         virtual void Read(std::istream &in);
00314 
00315         void AddAction(FlashActionRecord *r);
00316 private:
00317         std::vector<FlashActionRecord *> m_actions;
00318         gc_vector<FlashActionRecord *> records_delete;
00319 };
00320 
00321 class FlashActionConstantPool : public FlashActionRecord
00322 {
00323 public:
00324         FlashActionConstantPool(char *c ...);
00325         ~FlashActionConstantPool() {}
00326 
00327         virtual void Write(std::ostream &out);
00328         virtual void Read(std::istream &in);
00329 
00330 private:
00331         FlashActionConstantPool() {}
00332         friend class FlashActionVectorImporter;
00333         int m_length;
00334         std::vector<char *>m_strings;
00335         gc_vector<char *>m_gcstrings;
00336 };
00337 
00338 /* Do Action Tag */
00339 class FlashTagDoAction : public FlashSpriteEnabled
00340 {
00341 DEFINE_RW_INTERFACE
00342 public:
00343         FlashTagDoAction() {}
00344         ~FlashTagDoAction();
00345 
00346         UWORD GetNumActions() { return records.size(); }
00347         FlashActionRecord *GetAction(UWORD pos) { return records[pos]; }
00348 
00349         void AddAction(FlashActionRecord *r);
00350 
00351         friend std::ostream &operator<< (std::ostream &out, FlashTagDoAction &data);
00352         friend std::istream &operator>> (std::istream &in,  FlashTagDoAction &data);
00353 
00354 private:
00355         std::vector<FlashActionRecord *> records;
00356         gc_vector<FlashActionRecord *> records_delete;
00357 };
00358 
00359 class FlashActionVectorImporter
00360 {
00361 public:
00362         FlashActionVectorImporter() {}
00363         ~FlashActionVectorImporter() {}
00364 
00365         void Import(std::istream &in, std::vector<FlashActionRecord *> &v, gc_vector<FlashActionRecord*> &d);
00366         void Import(std::istream &in, std::vector<FlashActionRecord *> &v, gc_vector<FlashActionRecord*> &d, UDWORD num_actions);
00367 private:
00368 };
00369 #endif  // FACTION_H_FILE
00370 

Generated at Wed Aug 1 13:33:50 2001 for SWFSource by doxygen1.2.9 written by Dimitri van Heesch, © 1997-2001