home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / flash078.zip / flashsource-r0_7_8.zip / FImport.cpp < prev    next >
C/C++ Source or Header  |  2001-07-26  |  16KB  |  502 lines

  1. #include "FBase.h"
  2. #include "FImport.h"
  3. #include "FBitmap.h"
  4. #include "FSound.h"
  5. #include "FControl.h"
  6.  
  7. #include <iostream>
  8.  
  9. // NOT COMPLETE
  10.  
  11. void FlashMyImporter::PrintMatrix(const FlashMatrix &m)
  12. {
  13.     if(m.HasRotate()) std::cout << "  Rotate:    " << (double)m.GetRotateX().lowerval/0xffff + m.GetRotateX().upperval << ", " << (double)m.GetRotateY().lowerval/0xffff + m.GetRotateY().upperval << "\n";
  14.     if(m.HasScale())  std::cout << "  Scale:     " << (double)m.GetScaleX().lowerval/0xffff + m.GetScaleX().upperval << ", " << (double)m.GetScaleY().lowerval/0xffff + m.GetScaleY().upperval << "\n";
  15.     std::cout                    << "  Translate: " << (double)m.GetTranslateX().lowerval/0xffff + m.GetTranslateX().upperval << ", " << (double)m.GetTranslateY().lowerval/0xffff + m.GetTranslateY().upperval << "\n";
  16. }
  17.  
  18. void FlashMyImporter::PrintCFX(const FlashColorTransform &cfx)
  19. {
  20.     
  21.     if(cfx.HasAdd())
  22.     {
  23.         if(cfx.GetAddRGB().GetAlphaWriteMode())
  24.         {
  25.             std::cout   << "  AddRGBA:  " << cfx.GetAddRGB().GetR() << ", " << cfx.GetAddRGB().GetG() << ", " << cfx.GetAddRGB().GetB() << ", " << cfx.GetAddRGB().GetA() << "\n";
  26.         }
  27.         else std::cout  << "  AddRGB:   " << cfx.GetAddRGB().GetR() << ", " << cfx.GetAddRGB().GetG() << ", " << cfx.GetAddRGB().GetB() << "\n";
  28.     }
  29.     if(cfx.HasMult())
  30.     {
  31.         if(cfx.GetMultRGB().GetAlphaWriteMode())
  32.         {
  33.             std::cout   << "  MultRGBA:  " << cfx.GetMultRGB().GetR() << ", " << cfx.GetMultRGB().GetG() << ", " << cfx.GetMultRGB().GetB() << ", " << cfx.GetMultRGB().GetA() << "\n";
  34.         }
  35.         else std::cout   <<"  MultRGB:   " << cfx.GetMultRGB().GetR() << ", " << cfx.GetMultRGB().GetG() << ", " << cfx.GetMultRGB().GetB() << "\n";
  36.     }
  37. }
  38.  
  39.  
  40. void FlashMyImporter::PrintRect(const FlashRect &r)
  41. {
  42.     std::cout << " [RECT] (" << r.GetX1() << ", " << r.GetY1() << ", " << r.GetX2() << ", " << r.GetY2() << ")\n";
  43. }
  44.  
  45. void FlashMyImporter::Import(FlashHeader &data)
  46. {
  47.     std::cout << "\n<FLASH FILE HEADER>\n";
  48.     std::cout << "File Version: "<< (int)data.GetVersion() << "\n";
  49.     std::cout << "Frame Size (x): "  << (data.GetScreenSize().GetX2()) << "\n";
  50.     std::cout << "Frame Size (y): "  << (data.GetScreenSize().GetY2()) << "\n";
  51.     std::cout << "Frame Rate: "  << data.GetFrameRate().ConvertToDouble() << "\n";
  52.     std::cout << "Frame Count: " << data.GetFrameCount() << "\n";
  53.     std::cout << "File Length: " << data.GetFilesize() << "\n";
  54. }
  55.  
  56. void FlashMyImporter::Import(FlashTagHeader &data)
  57. {
  58.     std::cout << "\n<UNKNOWN TAG>\n";
  59.     std::cout << "ID: "        << data.GetTagID() << "\n";
  60.     std::cout << "Length: " << data.GetTagLength() << "\n";
  61. }
  62. void FlashMyImporter::Import(FlashTagRemoveObject &data)
  63. {
  64.     std::cout << "\n<RemoveObject>\n";
  65.     std::cout << "Character ID: " << data.GetCharID() << "\n";
  66.     std::cout << "Depth: "        << data.GetDepth() << "\n";
  67. }
  68. void FlashMyImporter::Import(FlashTagRemoveObject2 &data)
  69. {
  70.     std::cout << "\n<RemoveObject2>\n";
  71.     std::cout << "Depth: "        << data.GetDepth() << "\n";
  72. }
  73. void FlashMyImporter::Import(FlashTagPlaceObject &data)
  74. {
  75.     std::cout << "\n<PlaceObject>\n";
  76.     std::cout << "Character ID: " << data.GetCharID() << "\n";
  77.     std::cout << "Depth: "          << data.GetDepth() << "\n";
  78.     std::cout << "Matrix: "          << "\n";
  79.     PrintMatrix(data.GetMatrix());
  80.     if(data.HasColorTransform())  std::cout << "HasColorTransform: true"  << "\n"; 
  81.     else                        std::cout << "HasColorTransform: false" << "\n"; 
  82. }
  83. void FlashMyImporter::Import(FlashTagPlaceObject2 &data)
  84. {
  85.     std::cout << "\n<PlaceObject2>\n";
  86.     std::cout << "Depth: "          << data.GetDepth() << "\n";
  87.     
  88.     if(data.HasCharID())        std::cout << "HasCharID: true [" << data.GetCharID() << "]\n"; 
  89.     else                        std::cout << "HasCharID: false" << "\n"; 
  90.     if(data.HasMatrix())
  91.     {
  92.         std::cout << "HasMatrix: true"  << "\n"; 
  93.         PrintMatrix(data.GetMatrix());
  94.     }
  95.     else                        std::cout << "HasMatrix: false" << "\n"; 
  96.     
  97.     if(data.HasColorTransform())
  98.     {
  99.         std::cout << "HasColorTransform: true"  << "\n"; 
  100.         PrintCFX(data.GetColorTransform());
  101.     }
  102.     else                        std::cout << "HasColorTransform: false" << "\n"; 
  103.     if(data.HasMove())            std::cout << "HasMove: true"  << "\n"; 
  104.     else                        std::cout << "HasMove: false" << "\n"; 
  105.     if(data.HasRatio())            std::cout << "HasRatio: true ["  << data.GetRatio() << "]\n"; 
  106.     else                        std::cout << "HasRatio: false" << "\n"; 
  107.     if(data.HasName())            std::cout << "HasName: true ["  << data.GetName() << "]\n"; 
  108.     else                        std::cout << "HasName: false" << "\n"; 
  109.  
  110.  
  111. }
  112. void FlashMyImporter::Import(FlashTagShowFrame &data) 
  113. {
  114.     std::cout << "\n<FlashTagShowFrame>\n";
  115. }
  116.  
  117. void FlashMyImporter::Import(FlashTagBackgroundColor &data)
  118. {
  119.     std::cout << "\n<FlashTagBackgroundColor>\n";
  120.     std::cout << "RGB: " << data.GetRGB().GetR() << ", " << data.GetRGB().GetG() << ", " << data.GetRGB().GetB() << "\n";
  121. }
  122. void FlashMyImporter::Import(FlashTagLabelFrame &data)
  123. {
  124.     std::cout << "\n<FlashTagLabelFrame>\n";
  125.     std::cout << "Label: " << data.GetLabel() << "\n";
  126. }
  127. void FlashMyImporter::Import(FlashTagProtect &data)
  128. {
  129.     std::cout << "\n<FlashTagProtect>\n";
  130.     if(data.HasPassword())
  131.     {
  132.         std::cout << "Password (Encrypted): " << data.GetEncryptedPassword() << "\n";
  133.     }
  134. }
  135. void FlashMyImporter::Import(FlashTagEnableDebugger &data)
  136. {
  137.     std::cout << "\n<FlashTagEnableDebugger>\n";
  138.     
  139.     if(data.HasPassword())
  140.     {
  141.         std::cout << "Password: " << data.GetEncryptedPassword() << "\n";
  142.     }
  143. }
  144.  
  145. void FlashMyImporter::Import(FlashTagDefineBitsPtr &data)
  146. {
  147.     std::cout << "\n<FlashTagDefineBitsPtr>\n";
  148.     std::cout << "Ptr: " << data.GetPtr() << "\n";
  149.     
  150. }
  151.  
  152. void FlashMyImporter::Import(FlashTagEnd &data)
  153. {
  154.     std::cout << "\n<FlashTagEnd>\n";
  155. }
  156. void FlashMyImporter::Import(FlashTagExportAssets &data)
  157. {
  158.     std::cout << "\n<FlashTagExportAssets>\n";
  159.     int num = data.GetAssetNum();
  160.     for(int i=0; i < num; i++)
  161.     {
  162.         std::cout << "Asset " << i << " (name): " << data.GetAsset(i).first << "\n"; 
  163.         std::cout << "Asset " << i << " (id):   " << data.GetAsset(i).second << "\n"; 
  164.     }
  165.     
  166. }
  167. void FlashMyImporter::Import(FlashTagImportAssets &data)
  168. {
  169.     std::cout << "\n<FlashTagImportAssets>\n";
  170.     std::cout << "SWF Url: " << data.GetSwfUrl() << "\n";
  171.     int num = data.GetAssetNum();
  172.     for(int i=0; i < num; i++)
  173.     {
  174.         std::cout << "Asset " << i << " (name): " << data.GetAsset(i).first << "\n"; 
  175.         std::cout << "Asset " << i << " (id):   " << data.GetAsset(i).second << "\n"; 
  176.     }
  177. }
  178. void FlashMyImporter::Import(FlashTagDoAction &data)
  179. {
  180.     std::cout << "\n<FlashTagDoAction>\n";
  181.     std::cout << "Num Actions: " << data.GetNumActions() << "\n";
  182.  
  183. }
  184.  
  185. void FlashMyImporter::Import(FlashTagDefineBitsJPEG1 &data)
  186. {
  187.     std::cout << "\n<FlashTagDefineBitsJPEG1>\n";
  188.     std::cout << "ID:" << data.GetID() << "\n";
  189. }
  190. void FlashMyImporter::Import(FlashTagJPEGTables &data)
  191. {
  192.     std::cout << "\n<FlashTagJPEGTables>\n";
  193. }
  194. void FlashMyImporter::Import(FlashTagDefineBitsJPEG2 &data) 
  195. {
  196.     std::cout << "\n<FlashTagDefineBitsJPEG2>\n";
  197.     std::cout << "ID:" << data.GetID() << "\n";
  198.  
  199. }
  200. void FlashMyImporter::Import(FlashTagDefineBitsJPEG3 &data) 
  201. {
  202.     std::cout << "\n<FlashTagDefineBitsJPEG3>\n";
  203.     std::cout << "ID:" << data.GetID() << "\n";
  204.  
  205. }
  206. void FlashMyImporter::Import(FlashTagDefineBitsLossless &data) 
  207. {
  208.     std::cout << "\n<FlashTagDefineBitsLossless>\n";
  209.     std::cout << "ID:" << data.GetID() << "\n";
  210.     std::cout << "Format: " << data.GetFormat() << "\n";
  211.     std::cout << "Width: " << data.GetWidth() << " Height: " << data.GetHeight() << "\n";
  212.  
  213. }
  214. void FlashMyImporter::Import(FlashTagDefineBitsLossless2 &data) 
  215. {
  216.     std::cout << "\n<FlashTagDefineBitsLossless2>\n";
  217.     std::cout << "ID:" << data.GetID() << "\n";
  218.     std::cout << "Format: " << data.GetFormat() << "\n";
  219.     std::cout << "Width: " << data.GetWidth() << " Height: " << data.GetHeight() << "\n";
  220.  
  221. }
  222.  
  223. void FlashMyImporter::Import(FlashTagDefineShape1 &data)
  224. {
  225.     std::cout << "\n<FlashTagDefineShape1>\n";
  226.     std::cout << "ID:" << data.GetID() << "\n";
  227.     PrintRect(data.GetShapes().GetBounds());
  228.     PrintRect(data.rimport);
  229. }
  230. void FlashMyImporter::Import(FlashTagDefineShape2 &data)
  231. {
  232.     std::cout << "\n<FlashTagDefineShape2>\n";
  233.     std::cout << "ID:" << data.GetID() << "\n";
  234.     PrintRect(data.GetShapes().GetBounds());
  235.     PrintRect(data.rimport);
  236. }
  237. void FlashMyImporter::Import(FlashTagDefineShape3 &data)
  238. {
  239.     std::cout << "\n<FlashTagDefineShape3>\n";
  240.     std::cout << "ID:" << data.GetID() << "\n";
  241.     PrintRect(data.GetShapes().GetBounds());
  242.     PrintRect(data.rimport);
  243. }
  244. void FlashMyImporter::Import(FlashTagFreeCharacter &data)
  245. {
  246.     std::cout << "\n<FreeCharacter>\n";
  247.     std::cout << "ID:" << data.GetID() << "\n";
  248. }
  249.  
  250. void FlashMyImporter::Import(FlashTagDefineSound &data)
  251. {
  252.     std::cout << "\n<FlashTagDefineSound>\n";
  253.     std::cout << "ID:" << data.GetID() << "\n";
  254.     std::cout << "Flags:" << (int)data.GetFlags() << "\n";
  255.     std::cout << "Sample Count:" << data.GetSampleCount() << "\n";
  256.     std::cout << "Sample Length:" << data.GetSampleLength() << "\n";
  257. }
  258.  
  259. void FlashMyImporter::Import(FlashTagDefineSoundMP3 &data)
  260. {
  261.     std::cout << "\n<FlashTagDefineSoundMP3>\n";
  262.     std::cout << "ID:" << data.GetID() << "\n";
  263.     std::cout << "Flags:" << (int)data.GetFlags() << "\n";
  264.     std::cout << "Sample Count:" << data.GetSampleCount() << "\n";
  265.     std::cout << "Sample Length:" << data.GetSampleLength() << "\n";
  266. }
  267.  
  268. void FlashMyImporter::Import(FlashTagStartSound &data)
  269. {
  270.     std::cout << "\n<FlashTagStartSound>\n";
  271.     std::cout << "ID:" << data.GetID() << "\n";
  272.     std::cout << "Sound Info:\n";
  273.     std::cout << "  Flags: "  << (int)data.GetSoundInfo().GetFlags()   << "\n";
  274.     
  275.     if(data.GetSoundInfo().GetFlags() & FSI_HAS_IN != 0) std::cout << "  In Point: "  << data.GetSoundInfo().GetInPoint()   << "\n";
  276.     if(data.GetSoundInfo().GetFlags() & FSI_HAS_OUT != 0) std::cout << "  Out Point: " << data.GetSoundInfo().GetOutPoint()  << "\n";
  277.     if(data.GetSoundInfo().GetFlags() & FSI_HAS_LOOP != 0) std::cout << "  Loop Count: " << data.GetSoundInfo().GetLoopCount() <<  "\n";
  278.     if(data.GetSoundInfo().GetFlags() & FSI_HAS_ENVELOPE != 0) std::cout << "  Sound Envelopes Found\n";
  279. }
  280. void FlashMyImporter::Import(FlashTagSoundStreamHead &data)
  281. {
  282.     std::cout << "\n<FlashTagSoundStreamHead>\n";
  283.     std::cout << "Play Rate: " <<  (int)data.GetPlayRate() << "\n";
  284.     std::cout << "Play 16 Bit: " << data.GetPlay16bit() << "\n";
  285.     std::cout << "Play Stereo: " << data.GetPlayStereo() << "\n";
  286.     std::cout << "Compression: " << (int)data.GetCompression() << "\n";
  287.     std::cout << "Stream Rate: " << (int)data.GetStreamRate() << "\n";
  288.     std::cout << "Stream 16 Bit: " << data.GetStream16bit() << "\n";
  289.     std::cout << "Stream Stereo: " << data.GetStreamStereo() << "\n";
  290.     std::cout << "Sample Count Avg.: " << data.GetSampleCountAvg() << "\n";
  291.  
  292.     
  293. }
  294. void FlashMyImporter::Import(FlashTagSoundStreamHead2 &data)
  295. {
  296.     std::cout << "\n<FlashTagSoundStreamHead2>\n";
  297.     std::cout << "Play Rate: " << (int)data.GetPlayRate() << "\n";
  298.     std::cout << "Play 16 Bit: " << data.GetPlay16bit() << "\n";
  299.     std::cout << "Play Stereo: " << data.GetPlayStereo()<< "\n";
  300.     std::cout << "Compression: " << (int)data.GetCompression() << "\n";
  301.     std::cout << "Stream Rate: " << (int)data.GetStreamRate() << "\n";
  302.     std::cout << "Stream 16 Bit: " << data.GetStream16bit() << "\n";
  303.     std::cout << "Stream Stereo: " << data.GetStreamStereo() << "\n";
  304.     std::cout << "Sample Count Avg.: " << data.GetSampleCountAvg() << "\n";
  305.  
  306. }
  307. void FlashMyImporter::Import(FlashTagSoundStreamBlock &data)
  308. {
  309.     std::cout << "\n<FlashTagSoundStreamBlock>\n";
  310.     std::cout << "Length:" << data.GetSampleLength() << "\n";
  311. }
  312.  
  313.  
  314.  
  315. FlashHeader FlashImporter::ImportHeader(std::istream &in, FlashImportHandler &i)
  316. {
  317.     FlashHeader h;
  318.     in >> h;
  319.     i.Import(h);
  320.     return h;
  321. }
  322.  
  323.  
  324. #define IMPORT_MACRO(id, name)                              \
  325.     if(tagHeader.GetTagID() == id)                           \
  326.     {                                                        \
  327.         name tmp;                                            \
  328.         tmp.SetImportSize(tagHeader.GetTagLength());         \
  329.         in >> tmp;                                           \
  330.         i.Import(tmp);                                       \
  331.  
  332. bool FlashImporter::ImportTag(std::istream &in, FlashImportHandler &i)
  333. {
  334.     FlashTagHeader tagHeader;
  335.     in >> tagHeader;
  336.     
  337.     std::streampos start = in.tellg();
  338.  
  339.     if(tagHeader.GetTagID() == 4)
  340.     {
  341.         FlashTagPlaceObject tmp;
  342.         tmp.SetImportSize(tagHeader.GetTagLength());
  343.         in >> tmp;
  344.         i.Import(tmp); // PlaceObject
  345.     }
  346.     else if(tagHeader.GetTagID() == 26)
  347.     {
  348.         FlashTagPlaceObject2 tmp;
  349.         tmp.SetImportSize(tagHeader.GetTagLength());
  350.         in >> tmp;
  351.         i.Import(tmp); // PlaceObject2
  352.     }
  353.     else if(tagHeader.GetTagID() ==  5)
  354.     {
  355.         FlashTagRemoveObject tmp;
  356.         tmp.SetImportSize(tagHeader.GetTagLength());
  357.         in >> tmp;
  358.         i.Import(tmp); // RemoveObject
  359.     }
  360.     else if(tagHeader.GetTagID() == 28)
  361.     {
  362.         FlashTagRemoveObject2 tmp;
  363.         tmp.SetImportSize(tagHeader.GetTagLength());
  364.         in >> tmp;
  365.         i.Import(tmp); // RemoveObject2
  366.     }
  367.     else if(tagHeader.GetTagID() == 1)
  368.     {
  369.         FlashTagShowFrame tmp;
  370.         tmp.SetImportSize(tagHeader.GetTagLength());
  371.         in >> tmp;
  372.         i.Import(tmp); // ShowFrame
  373.     }
  374.     else if(tagHeader.GetTagID() == 9)
  375.     {
  376.         FlashTagBackgroundColor tmp;
  377.         tmp.SetImportSize(tagHeader.GetTagLength());
  378.         in >> tmp;
  379.         i.Import(tmp);
  380.     }
  381.     else if(tagHeader.GetTagID() == 43)
  382.     {
  383.         FlashTagLabelFrame tmp;
  384.         tmp.SetImportSize(tagHeader.GetTagLength());
  385.         in >> tmp;
  386.         i.Import(tmp);
  387.     }
  388.     else if(tagHeader.GetTagID() == 24)
  389.     {
  390.         FlashTagProtect tmp;
  391.         tmp.SetImportSize(tagHeader.GetTagLength());
  392.         in >> tmp;
  393.         i.Import(tmp);
  394.     }
  395.     else if(tagHeader.GetTagID() == 0)
  396.     {
  397.         FlashTagEnd tmp;
  398.         tmp.SetImportSize(tagHeader.GetTagLength());
  399.         in >> tmp;
  400.         i.Import(tmp);
  401.     }
  402.     else if(tagHeader.GetTagID() == 56)
  403.     {
  404.         FlashTagExportAssets tmp;
  405.         tmp.SetImportSize(tagHeader.GetTagLength());
  406.         in >> tmp;
  407.         i.Import(tmp);
  408.     }
  409.     else if(tagHeader.GetTagID() == 57)
  410.     {
  411.         FlashTagImportAssets tmp;
  412.         tmp.SetImportSize(tagHeader.GetTagLength());
  413.         in >> tmp;
  414.         i.Import(tmp);
  415.     }
  416.     else IMPORT_MACRO(8, FlashTagJPEGTables)
  417.     else IMPORT_MACRO(6,  FlashTagDefineBitsJPEG1)
  418.     else IMPORT_MACRO(21, FlashTagDefineBitsJPEG2)
  419.     else IMPORT_MACRO(35, FlashTagDefineBitsJPEG3)
  420.     else IMPORT_MACRO(20, FlashTagDefineBitsLossless)
  421.     else IMPORT_MACRO(36, FlashTagDefineBitsLossless2)
  422.  
  423.     else IMPORT_MACRO(2,  FlashTagDefineShape1)
  424.     else IMPORT_MACRO(22, FlashTagDefineShape2)
  425.     else IMPORT_MACRO(32, FlashTagDefineShape3)
  426.     else IMPORT_MACRO(3,  FlashTagFreeCharacter)
  427.  
  428.     else if(tagHeader.GetTagID() == 14)
  429.     {
  430.         
  431.         int c = in.get();
  432.         if(c == EOF)
  433.         { 
  434.             //throw
  435.         }
  436.         else
  437.         {
  438.             if(c & FTDS_COMPRESS_MP3 != 0) 
  439.             {
  440.                 in.putback(c);
  441.                 FlashTagDefineSoundMP3 tmp;
  442.                 tmp.SetImportSize(tagHeader.GetTagLength());
  443.                 in >> tmp;
  444.                 i.Import(tmp);
  445.             }
  446.             else
  447.             {
  448.                 in.putback(c);
  449.                 FlashTagDefineSound tmp;
  450.                 tmp.SetImportSize(tagHeader.GetTagLength());
  451.                 in >> tmp;
  452.                 i.Import(tmp);
  453.             }
  454.         }    
  455.     }
  456.  
  457.     else IMPORT_MACRO(15, FlashTagStartSound)
  458.     else IMPORT_MACRO(18, FlashTagSoundStreamHead)
  459.     else IMPORT_MACRO(45, FlashTagSoundStreamHead2)
  460.     else IMPORT_MACRO(19, FlashTagSoundStreamBlock)
  461.     
  462.     else
  463.     {
  464.         for(UDWORD index=0; index < tagHeader.GetTagLength(); index++)
  465.         {
  466.             in.get();
  467.         }
  468.         i.Import(tagHeader);
  469.     }
  470.     
  471.     if(tagHeader.GetTagLength() + start != (UDWORD)in.tellg())
  472.     {
  473.         if(tagHeader.GetTagLength() + start > (UDWORD)in.tellg())
  474.         {
  475.             UDWORD difference = (tagHeader.GetTagLength() + start) - (UDWORD)in.tellg();
  476.             
  477.             std::cout << "Extra Tag Data Encountered: " <<  difference;
  478.             
  479.  
  480.             for(UDWORD index=0; index < difference; index++)
  481.             {
  482.                 in.get();
  483.             }
  484.         }
  485.         else
  486.         {
  487.             //ADD HANDLER???
  488.             
  489.             UDWORD difference = (UDWORD)in.tellg() - (UDWORD)(tagHeader.GetTagLength() + start);
  490.             std::cout << "Tag Size Discrepancy: -" << difference;
  491.             return false;
  492.         }
  493.     }
  494.     if(tagHeader.GetTagID() == 0)
  495.     {
  496.         return false;
  497.     }
  498.     return true;
  499. }
  500.  
  501.