X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fmodules%2Fswfbutton.c;h=fc1d0871916ef9df4e0088c9b5fe52dc5992e5f8;hb=cfb06dab4b1674078f1306d1c537ad03d00def26;hp=23bd3c772397d8c95155ed4d7368316dff5ccfb9;hpb=0a28555a52d08dc5b97b7aed5746dfb73326ef28;p=swftools.git diff --git a/lib/modules/swfbutton.c b/lib/modules/swfbutton.c index 23bd3c7..fc1d087 100644 --- a/lib/modules/swfbutton.c +++ b/lib/modules/swfbutton.c @@ -1,92 +1,92 @@ -/* swfbutton.c - - Button functions - - Extension module for the rfxswf library. - Part of the swftools package. - - Copyright (c) 2000, 2001 Rainer Böhme - - This file is distributed under the GPL, see file COPYING for details - -*/ - -int ButtonSetRecord(LPTAG t,U8 state,U16 id,U16 layer,LPMATRIX m,LPCXFORM cx) - -{ SetU8(t,state); - SetU16(t,id); - SetU16(t,layer); - SetMatrix(t,m); -// SetCXForm(t,cx,0); - return 0; -} - -int ButtonSetCondition(LPTAG t,U16 condition) -{ SetU16(t,0); // dummy for Action Offset -> later set by ButtonPostProcess - SetU16(t,condition); - return 0; -} - -int ButtonSetFlags(LPTAG t,U8 flags) -{ if (GetTagID(t)==ST_DEFINEBUTTON2) - { SetU8(t,flags); - SetU16(t,0); // dummy for Action Offset -> later set by ButtonPostProcess - } - return 0; -} - -void SetButtonOffset(LPTAG t,U32 offsetpos) -{ U32 now = GetTagPos(t); - U16 diff = now-offsetpos; - SetTagPos(t,offsetpos); - t->data[t->pos++] = (U8)(diff&0xff); - t->data[t->pos++] = (U8)(diff>>8); - SetTagPos(t,now); -} - -int ButtonPostProcess(LPTAG t,int anz_action) -{ if (GetTagID(t)==ST_DEFINEBUTTON2) - { U32 oldTagPos; - U32 offsetpos; - - oldTagPos = GetTagPos(t); - - // scan DefineButton2 Record - - GetU16(t); // Character ID - GetU8(t); // Flags; - - offsetpos = GetTagPos(t); // first offset - GetU16(t); - - while (GetU8(t)) // state -> parse ButtonRecord - { GetU16(t); // id - GetU16(t); // layer - GetMatrix(t,NULL); // matrix - // evtl.: CXForm - } - - SetButtonOffset(t,offsetpos); - - while(anz_action) - { U8 a; - - offsetpos = GetTagPos(t); // offset - GetU16(t); - - GetU16(t); // condition - - while (a=GetU8(t)) // skip action records - { if (a&0x80) - { U16 l = GetU16(t); - GetBlock(t,NULL,l); - } - } - - if (--anz_action) SetButtonOffset(t,offsetpos); - } - - SetTagPos(t,oldTagPos); - } - return 0; -} +/* swfbutton.c + + Button functions + + Extension module for the rfxswf library. + Part of the swftools package. + + Copyright (c) 2000, 2001 Rainer Böhme + + This file is distributed under the GPL, see file COPYING for details + +*/ + +int ButtonSetRecord(TAG * t,U8 state,U16 id,U16 layer,MATRIX * m,CXFORM * cx) + +{ SetU8(t,state); + SetU16(t,id); + SetU16(t,layer); + SetMatrix(t,m); +// SetCXForm(t,cx,0); + return 0; +} + +int ButtonSetCondition(TAG * t,U16 condition) +{ SetU16(t,0); // dummy for Action Offset -> later set by ButtonPostProcess + SetU16(t,condition); + return 0; +} + +int ButtonSetFlags(TAG * t,U8 flags) +{ if (GetTagID(t)==ST_DEFINEBUTTON2) + { SetU8(t,flags); + SetU16(t,0); // dummy for Action Offset -> later set by ButtonPostProcess + } + return 0; +} + +void SetButtonOffset(TAG * t,U32 offsetpos) +{ U32 now = GetTagPos(t); + U16 diff = now-offsetpos; + SetTagPos(t,offsetpos); + t->data[t->pos++] = (U8)(diff&0xff); + t->data[t->pos++] = (U8)(diff>>8); + SetTagPos(t,now); +} + +int ButtonPostProcess(TAG * t,int anz_action) +{ if (GetTagID(t)==ST_DEFINEBUTTON2) + { U32 oldTagPos; + U32 offsetpos; + + oldTagPos = GetTagPos(t); + + // scan DefineButton2 Record + + GetU16(t); // Character ID + GetU8(t); // Flags; + + offsetpos = GetTagPos(t); // first offset + GetU16(t); + + while (GetU8(t)) // state -> parse ButtonRecord + { GetU16(t); // id + GetU16(t); // layer + GetMatrix(t,NULL); // matrix + // evtl.: CXForm + } + + SetButtonOffset(t,offsetpos); + + while(anz_action) + { U8 a; + + offsetpos = GetTagPos(t); // offset + GetU16(t); + + GetU16(t); // condition + + while (a=GetU8(t)) // skip action records + { if (a&0x80) + { U16 l = GetU16(t); + GetBlock(t,NULL,l); + } + } + + if (--anz_action) SetButtonOffset(t,offsetpos); + } + + SetTagPos(t,oldTagPos); + } + return 0; +}