📄 fsmovie.java
字号:
identifier = ((FSDefineObject)currentObject).getIdentifier();
break;
case FSMovieObject.DefineMovieClip:
currentObject = new FSDefineMovieClip(coder);
identifier = ((FSDefineObject)currentObject).getIdentifier();
break;
case FSMovieObject.FrameLabel:
currentObject = new FSFrameLabel(coder);
break;
case FSMovieObject.SoundStreamHead2:
currentObject = new FSSoundStreamHead2(coder);
break;
case FSMovieObject.DefineMorphShape:
currentObject = new FSDefineMorphShape(coder);
identifier = ((FSDefineObject)currentObject).getIdentifier();
break;
case FSMovieObject.DefineFont2:
currentObject = new FSDefineFont2(coder);
identifier = ((FSDefineObject)currentObject).getIdentifier();
break;
// Flash 4
case FSMovieObject.PathsArePostscript:
currentObject = FSPathsArePostscript.getInstance();
coder.setPointer(next);
break;
case FSMovieObject.DefineTextField:
currentObject = new FSDefineTextField(coder);
identifier = ((FSDefineObject)currentObject).getIdentifier();
break;
case FSMovieObject.QuicktimeMovie:
currentObject = new FSQuicktimeMovie(coder);
break;
case FSMovieObject.SerialNumber:
currentObject = new FSSerialNumber(coder);
break;
case FSMovieObject.DefineBitsPtr:
currentObject = new FSPointer(coder);
break;
// Flash 5
case FSMovieObject.EnableDebugger:
currentObject = new FSEnableDebugger(coder);
break;
case FSMovieObject.Export:
currentObject = new FSExport(coder);
break;
case FSMovieObject.Import:
currentObject = new FSImport(coder);
break;
// Flash 6
case FSMovieObject.Initialize:
currentObject = new FSInitialize(coder);
break;
case FSMovieObject.DefineVideo:
currentObject = new FSDefineVideo(coder);
identifier = ((FSDefineObject)currentObject).getIdentifier();
break;
case FSMovieObject.VideoFrame:
currentObject = new FSVideoFrame(coder);
break;
case FSMovieObject.FontInfo2:
currentObject = new FSFontInfo2(coder);
break;
case FSMovieObject.EnableDebugger2:
currentObject = new FSEnableDebugger2(coder);
break;
// Flash 7
case FSMovieObject.LimitScript:
currentObject = new FSLimitScript(coder);
break;
case FSMovieObject.TabOrder:
currentObject = new FSTabOrder(coder);
break;
default:
currentObject = new FSUnknownObject(coder);
break;
}
int delta = (coder.getPointer() - next) >> 3;
if (delta != 0)
{
coder.context[FSCoder.CodingError] = 1;
coder.context[FSCoder.TypeInError] = currentObject.getType();
coder.context[FSCoder.StartOfError] = objStart >>> 3;
coder.context[FSCoder.ExpectedLength] = (next-objStart)>>>3;
coder.context[FSCoder.Delta] = delta;
}
coder.setPointer(next);
if (identifier != 0)
coder.context[FSCoder.Identifier] = Math.max(coder.context[FSCoder.Identifier], identifier);
return currentObject;
}
static FSActionObject decodeAction(FSCoder coder)
{
FSActionObject anAction = null;
int objStart = coder.getPointer();
int type = coder.scanWord(1, false);
int length = 0;
int start = coder.getPointer() + 8;
int next = start;
if (type == 0)
{
return anAction;
}
if (type > 128)
{
coder.adjustPointer(8);
length = coder.scanWord(2, false);
start = coder.getPointer() + 16;
next = start + (length << 3);
coder.adjustPointer(-8);
}
switch (type)
{
case FSAction.NextFrame:
case FSAction.PrevFrame:
case FSAction.Play:
case FSAction.Stop:
case FSAction.ToggleQuality:
case FSAction.StopSounds:
anAction = FSAction.getInstance(type);
coder.adjustPointer(8);
break;
case FSActionObject.GetUrl:
anAction = new FSGetUrl(coder);
break;
// Flash 3
case FSActionObject.GotoFrame:
anAction = new FSGotoFrame(coder);
break;
// Flash 4
case FSActionObject.GotoLabel:
anAction = new FSGotoLabel(coder);
break;
case FSActionObject.SetTarget:
anAction = new FSSetTarget(coder);
break;
case FSActionObject.WaitForFrame:
anAction = new FSWaitForFrame(coder);
break;
case FSAction.IntegerAdd:
case FSAction.Subtract:
case FSAction.IntegerEquals:
case FSAction.IntegerLess:
case FSAction.Multiply:
case FSAction.Divide:
case FSAction.And:
case FSAction.Or:
case FSAction.Not:
case FSAction.StringEquals:
case FSAction.StringLength:
case FSAction.StringExtract:
case FSAction.Pop:
case FSAction.ToInteger:
case FSAction.GetVariable:
case FSAction.SetVariable:
case FSAction.SetTarget2:
case FSAction.StringAdd:
case FSAction.GetProperty:
case FSAction.SetProperty:
case FSAction.CloneSprite:
case FSAction.RemoveSprite:
case FSAction.Trace:
case FSAction.StartDrag:
case FSAction.EndDrag:
case FSAction.StringLess:
case FSAction.RandomNumber:
case FSAction.MBStringLength:
case FSAction.CharToAscii:
case FSAction.AsciiToChar:
case FSAction.GetTime:
case FSAction.MBStringExtract:
case FSAction.MBCharToAscii:
case FSAction.MBAsciiToChar:
anAction = FSAction.getInstance(type);
coder.adjustPointer(8);
break;
case FSActionObject.Call:
anAction = FSCall.getInstance();
coder.setPointer(next);
break;
case FSActionObject.Push:
anAction = new FSPush(coder);
break;
case FSActionObject.WaitForFrame2:
anAction = new FSWaitForFrame2(coder);
break;
case FSActionObject.Jump:
anAction = new FSJump(coder);
break;
case FSActionObject.If:
anAction = new FSIf(coder);
break;
case FSActionObject.GetUrl2:
anAction = new FSGetUrl2(coder);
break;
case FSActionObject.GotoFrame2:
anAction = new FSGotoFrame2(coder);
break;
// Flash 5
case FSAction.Add:
case FSAction.Equals:
case FSAction.Less:
case FSAction.Modulo:
case FSAction.Enumerate:
case FSAction.Duplicate:
case FSAction.Swap:
case FSAction.ExecuteMethod:
case FSAction.NewMethod:
case FSAction.ExecuteFunction:
case FSAction.GetAttribute:
case FSAction.SetAttribute:
case FSAction.Increment:
case FSAction.Decrement:
case FSAction.LogicalShiftLeft:
case FSAction.LogicalShiftRight:
case FSAction.ArithmeticShiftRight:
case FSAction.BitwiseAnd:
case FSAction.BitwiseOr:
case FSAction.BitwiseXOr:
case FSAction.NamedObject:
case FSAction.NewArray:
case FSAction.NewObject:
case FSAction.DeleteVariable:
case FSAction.Delete:
case FSAction.Return:
case FSAction.ToNumber:
case FSAction.ToString:
case FSAction.GetType:
case FSAction.GetTarget:
case FSAction.NewVariable:
case FSAction.InitVariable:
anAction = FSAction.getInstance(type);
coder.adjustPointer(8);
break;
case FSActionObject.Table:
anAction = new FSTable(coder);
length = anAction.getLength();
next = start + (length << 3);
break;
case FSActionObject.RegisterCopy:
anAction = new FSRegisterCopy(coder);
break;
case FSActionObject.NewFunction:
anAction = new FSNewFunction(coder);
length = anAction.getLength();
next = start + (length << 3);
break;
case FSActionObject.With:
anAction = new FSWith(coder);
length = anAction.getLength();
next = start + (length << 3);
break;
// Flash 6
case FSAction.InstanceOf:
case FSAction.EnumerateObject:
case FSAction.Greater:
case FSAction.StringGreater:
case FSAction.StrictEquals:
anAction = FSAction.getInstance(type);
coder.adjustPointer(8);
break;
// Flash 7
case FSAction.Cast:
case FSAction.Extends:
case FSAction.Implements:
case FSAction.Throw:
anAction = FSAction.getInstance(type);
coder.adjustPointer(8);
break;
case FSActionObject.ExceptionHandler:
anAction = new FSExceptionHandler(coder);
case FSActionObject.NewFunction2:
anAction = new FSNewFunction2(coder);
length = anAction.getLength();
next = start + (length << 3);
break;
default:
anAction = new FSUnknownAction(coder);
break;
}
int delta = (coder.getPointer() - next) >> 3;
if (delta != 0)
{
coder.context[FSCoder.CodingError] = 1;
coder.context[FSCoder.TypeInError] = anAction.getType();
coder.context[FSCoder.StartOfError] = objStart >>> 3;
coder.context[FSCoder.ExpectedLength] = (next-objStart)>>>3;
coder.context[FSCoder.Delta] = delta;
}
coder.setPointer(next);
return anAction;
}
static ArrayList decodeActions(byte[] encodedActions)
{
FSCoder coder = new FSCoder(FSCoder.LITTLE_ENDIAN, encodedActions);
return decodeActions(coder);
}
static ArrayList decodeActions(FSCoder coder)
{
FSActionObject action = null;
ArrayList array = new ArrayList();
while ((action = FSMovie.decodeAction(coder)) != null) {
array.add(action);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -