📄 scriptplayer.java
字号:
{ int j = GetWord(); if (findCharacter(j) != null) return; SCharacter scharacter = createCharacter(j,-1); if(scharacter == null) return; scharacter.type = 5; int k = super.script[super.pos++] & 0xff; int l = GetDWord(); Sound sound; scharacter.object = sound = new Sound(k, l, super.script, super.pos,flash); if (sound == null) { freeCharacter(j); return; } scharacter.dataPos = super.pos; if(sound.CompressFormat() > 16) { freeCharacter(j); return; } else { sound.characterTag = j; sound.next = streamSound.next; streamSound.next = sound; return; } }*/ private void defineFont() { SCharacter scharacter; int ID = GetWord(); scharacter = findCharacter(ID); if (scharacter == null) scharacter = createCharacter(ID, -1); if (debug) System.out.println("defineFont() " + ID + " ,-1"); scharacter.type = SCharacter.SCHAR_TYPE_FONT; scharacter.bounds = new Rect(); scharacter.dataPos = super.pos; return; } private void defineFontInfo() { int ID, len, i, flags; SCharacter scharacter; ID = GetWord(); scharacter = findCharacter(ID); if (scharacter == null) scharacter = createCharacter(ID, -1); if (debug) System.out.println("defineFontInfo() " + ID + " ,-1"); len = GetByte(); for (i = 0; i < len; i++) GetByte(); // skip the font name flags = GetByte(); if ( (flags & 2) == 2) scharacter.fontBold = true; if ( (flags & 4) == 4) scharacter.fontItalic = true; } private void defineText() { SCharacter scharacter; int ID = GetWord(); scharacter = findCharacter(ID); if (scharacter == null) scharacter = createCharacter(ID, -1); if (debug) System.out.println("defineText() " + ID + ", -1"); scharacter.type = SCharacter.SCHAR_TYPE_TEXT; scharacter.bounds = GetRect(); scharacter.dataPos = super.pos; scharacter.matrix = GetMatrix(); scharacter.glyphBits = GetByte(); scharacter.advancedBits = GetByte(); } private void ParseHeader() { if (scriptErr != 0) return; if (gotHeader) return; if (len < 21) { return; } else { frame = GetRect(); frameRate = GetWord() << 8; frameDelay = 0x3e80000 / frameRate; numFrames = GetWord(); numFramesCompletePos = startPos = super.pos; curFrame = -1; gotHeader = true; return; } } public void PushData(byte abyte0[], int i) { if (scriptErr != 0) return; int j = 0; if (scriptLen < 0) { int k = Math.min(8 - headerLen, i); System.arraycopy(abyte0, j, headerBuf, headerLen, k); j += k; i -= k; headerLen += k; if (headerLen == 8) { if (headerBuf[0] != 70 || headerBuf[1] != 87 || headerBuf[2] != 83) { scriptErr = -1; return; } version = headerBuf[3]; scriptLen = headerBuf[4] & 0xff | (headerBuf[5] & 0xff) << 8 | (headerBuf[6] & 0xff) << 16 | (headerBuf[7] & 0xff) << 24; scriptLen -= 8; super.script = new byte[scriptLen]; if (super.script == null) { scriptErr = -2; return; } } else { return; } } if (len + i > scriptLen) i = Math.min(i, scriptLen - len); System.arraycopy(abyte0, j, super.script, len, i); len += i; if (!gotHeader) ParseHeader(); gotData.set(); } /* private void defineJPEGTables(int i) { jpegTableLen = i - 2; jpegTablePos = super.pos; }*/ /* private int ImageClassToUse() { if(imageClassToUse == 0) if(("SLAV" + System.getProperty("java.version")).indexOf("SLAV1.0") == -1) { imageClassToUse = 1; } else { imageClassToUse = 3; try { Class.forName("sun.awt.image.ImageDecoder"); imageClassToUse = 2; } catch(ClassNotFoundException _ex) { } } return imageClassToUse; }*/ private void defineBits(int i, int j) { int k = GetWord(); int l = 0; int i1 = 0; int j1 = 0; int k1 = 0; if (findCharacter(k) != null) return; SCharacter scharacter = createCharacter(k, -1); if (scharacter == null) return; scharacter.type = 1; scharacter.dataPos = super.pos - 8; if (j == 6) { j1 = super.pos + 2; k1 = i - 4; l = jpegTablePos; i1 = jpegTableLen; } else { l = super.pos; for (int l1 = l; l1 < super.end; l1++) { if ( (super.script[l1] & 0xff) != 255 || (super.script[l1 + 1] & 0xff) != 217) continue; i1 = l1 - l; break; } for (int i2 = l + i1; i2 < super.end; i2++) { if ( (super.script[i2] & 0xff) != 255 || (super.script[i2 + 1] & 0xff) != 216) continue; j1 = i2 + 2; k1 = i - 6 - i1; break; } } byte abyte0[] = new byte[i1 + k1]; if (abyte0 != null) { System.arraycopy(super.script, l, abyte0, 0, i1); System.arraycopy(super.script, j1, abyte0, i1, k1); /* switch(ImageClassToUse()) { case 1: // '\001'*/ scharacter.object = new Bitmap(Image.createImage(abyte0, 0, abyte0.length), display); return; /* case 2: // '\002' try { Object obj = Class.forName("ImageSource").newInstance(); if(obj != null) { ((ImageSource)obj).SetData(abyte0); ((ImageSource)obj).CreateInputStream(); Bitmap bitmap = new Bitmap((ImageSource)obj, display); ((ImageSource)obj).DestroyInputStream(); scharacter.object = bitmap; return; } } catch(Exception _ex) { scharacter.object = null; return; } break; case 3: // '\003' default: scharacter.object = null; return; }*/ } else { scharacter.object = null; } } private int tagCtr = 0; private int doTag() { if (super.script == null)return -3; if (scriptErr != 0)return scriptErr; if (atEnd)return 2; if (len - super.pos < 2)return 1; int i = super.pos; int j = GetWord(); int k = j & 0x3f; if (k == 63) { if (len - super.pos < 4) { super.pos = i; return 1; } k = GetDWord(); } nextPos = super.pos + k; super.end = nextPos; if (nextPos > len) { super.pos = i; return 1; } if ( (debug) && ( (j >> 6) != TAG_SOUNDSTREAMHEAD) && ( (j >> 6) != TAG_SOUNDSTREAMBLOCK)) {// if (tagCtr>30) System.exit(0); System.out.println("" + (j >> 6)); tagCtr++; } switch (j >> 6) { case TAG_SOUNDSTREAMHEAD: case TAG_SOUNDSTREAMBLOCK: // ToDo: add full sound support break; default: System.err.println("Unknown tag " + (j >> 6) + " at ScriptPlayer.doTag()"); break; case TAG_PROTECT: // not important for a player break; case TAG_DEFINEFONTINFO: case TAG_DEFINEFONTINFO2: defineFontInfo(); break; case 0: atEnd = true; break; case TAG_SHOWFRAME: curFrame++; break; case TAG_DEFINESHAPE: case TAG_DEFINESHAPE2: case TAG_DEFINESHAPE3: defineShape(); break; case TAG_FREE: freeCharacter(GetWord()); break; case TAG_PLACEOBJECT: placeObject(); break; case TAG_PLACEOBJECT2: placeObject2(); break; case TAG_REMOVEOBJECT: removeObject(); break; case TAG_REMOVEOBJECT2: removeObject2(); break; case TAG_DEFINEBITS: case TAG_DEFINEBITSJPEG2: defineBits(k, j >> 6); break; case TAG_JPEGTABLES: jpegTableLen = k - 2; jpegTablePos = super.pos; break; /* case TAG_DEFINESOUND: defineSound(k); break; case TAG_STARTSOUND: StartSound(); break; case TAG_DEFINEBUTTONSOUND: defineButtonExtra(true); break;*/ case TAG_DEFINEBUTTON: defineButton(); break; case TAG_DEFINEFONT: defineFont(); break; case TAG_DEFINETEXT: case TAG_DEFINETEXT2: defineText(); break; case TAG_SETBACKGROUNDCOLOR: int bgColor = GetColor(); display.setBackgroundColor(bgColor, 3); flash.setBGColor(bgColor); break; case TAG_DOACTION: if (nActions < 16) { actionList[nActions] = super.pos; nActions++; } break; case TAG_DEFINEBUTTONCXFORM: defineButtonExtra(false); break; } super.pos = nextPos; return scriptErr; } public int DrawFrame(int i) { if (scriptErr != 0) return scriptErr; if (!gotHeader) return 1; if (curFrame > i) FreeAll(); int j; for (j = 0; curFrame < i && j == 0; j = doTag()); return j; } boolean FrameComplete(int i) { if (numFramesComplete >= i) return true; if (scriptComplete) return true; if (super.script == null || scriptErr != -3) return false; SParser sparser = new SParser(); byte abyte0[] = super.script; int k = numFramesCompletePos; sparser.script = abyte0; sparser.pos = k; do { int j; do { if (len - sparser.pos < 2) return false; j = sparser.GetWord(); int l = j & 0x3f; if (l == 63) { if (len - super.pos < 4) return false; l = sparser.GetDWord(); } sparser.pos += l; if (sparser.pos > len) return false; numFramesCompletePos = sparser.pos; } while (j >> 6 != 1); numFramesComplete++; } while (numFramesComplete < i); return true; } public void loadScript(InputStream inputstream) { ClearScript(); scriptStream = inputstream; Thread thread = new Thread(this); thread.setPriority(6); thread.start(); } public void run() { try { byte abyte0[] = new byte[512]; do { int i = scriptStream.read(abyte0); if (i < 0)break; PushData(abyte0, i); } while (true); scriptStream.close(); } catch (IOException _ex) {} scriptStream = null; scriptComplete = true; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -