-/* swfbutton.c\r
-\r
- Button functions\r
-\r
- Extension module for the rfxswf library.\r
- Part of the swftools package.\r
-\r
- Copyright (c) 2000, 2001 Rainer Böhme <rfxswf@reflex-studio.de>\r
- \r
- This file is distributed under the GPL, see file COPYING for details \r
-\r
-*/\r
-\r
-int ButtonSetRecord(LPTAG t,U8 state,U16 id,U16 layer,LPMATRIX m,LPCXFORM cx)\r
-\r
-{ SetU8(t,state);\r
- SetU16(t,id);\r
- SetU16(t,layer);\r
- SetMatrix(t,m);\r
-// SetCXForm(t,cx,0);\r
- return 0;\r
-}\r
-\r
-int ButtonSetCondition(LPTAG t,U16 condition)\r
-{ SetU16(t,0); // dummy for Action Offset -> later set by ButtonPostProcess\r
- SetU16(t,condition);\r
- return 0;\r
-}\r
-\r
-int ButtonSetFlags(LPTAG t,U8 flags)\r
-{ if (GetTagID(t)==ST_DEFINEBUTTON2)\r
- { SetU8(t,flags);\r
- SetU16(t,0); // dummy for Action Offset -> later set by ButtonPostProcess\r
- }\r
- return 0;\r
-}\r
-\r
-void SetButtonOffset(LPTAG t,U32 offsetpos)\r
-{ U32 now = GetTagPos(t);\r
- U16 diff = now-offsetpos;\r
- SetTagPos(t,offsetpos);\r
- t->data[t->pos++] = (U8)(diff&0xff);\r
- t->data[t->pos++] = (U8)(diff>>8);\r
- SetTagPos(t,now);\r
-}\r
-\r
-int ButtonPostProcess(LPTAG t,int anz_action)\r
-{ if (GetTagID(t)==ST_DEFINEBUTTON2)\r
- { U32 oldTagPos;\r
- U32 offsetpos;\r
-\r
- oldTagPos = GetTagPos(t);\r
-\r
- // scan DefineButton2 Record\r
- \r
- GetU16(t); // Character ID\r
- GetU8(t); // Flags;\r
-\r
- offsetpos = GetTagPos(t); // first offset\r
- GetU16(t);\r
-\r
- while (GetU8(t)) // state -> parse ButtonRecord\r
- { GetU16(t); // id\r
- GetU16(t); // layer\r
- GetMatrix(t,NULL); // matrix\r
- // evtl.: CXForm\r
- }\r
-\r
- SetButtonOffset(t,offsetpos);\r
-\r
- while(anz_action)\r
- { U8 a;\r
- \r
- offsetpos = GetTagPos(t); // offset\r
- GetU16(t);\r
-\r
- GetU16(t); // condition\r
- \r
- while (a=GetU8(t)) // skip action records\r
- { if (a&0x80)\r
- { U16 l = GetU16(t);\r
- GetBlock(t,NULL,l);\r
- }\r
- }\r
- \r
- if (--anz_action) SetButtonOffset(t,offsetpos);\r
- }\r
- \r
- SetTagPos(t,oldTagPos);\r
- }\r
- return 0;\r
-}\r
+/* swfbutton.c
+
+ Button functions
+
+ Extension module for the rfxswf library.
+ Part of the swftools package.
+
+ Copyright (c) 2000, 2001 Rainer Böhme <rfxswf@reflex-studio.de>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#include "../rfxswf.h"
+
+int swf_ButtonSetRecord(TAG * t,U8 state,U16 id,U16 layer,MATRIX * m,CXFORM * cx)
+
+{ swf_SetU8(t,state);
+ swf_SetU16(t,id);
+ swf_SetU16(t,layer);
+ swf_SetMatrix(t,m);
+ if (swf_GetTagID(t)==ST_DEFINEBUTTON2) swf_SetCXForm(t,cx,1);
+ return 0;
+}
+
+int swf_ButtonSetCondition(TAG * t,U16 condition)
+{ swf_SetU16(t,0); // dummy for Action Offset -> later set by ButtonPostProcess
+ swf_SetU16(t,condition);
+ return 0;
+}
+
+int swf_ButtonSetFlags(TAG * t,U8 flags)
+{ if (swf_GetTagID(t)==ST_DEFINEBUTTON2)
+ { swf_SetU8(t,flags);
+ swf_SetU16(t,0); // dummy for Action Offset -> later set by ButtonPostProcess
+ }
+ return 0;
+}
+
+void swf_SetButtonOffset(TAG * t,U32 offsetpos)
+{ U32 now = swf_GetTagPos(t);
+ U16 diff = now-offsetpos;
+ swf_SetTagPos(t,offsetpos);
+ t->data[t->pos++] = (U8)(diff&0xff);
+ t->data[t->pos++] = (U8)(diff>>8);
+ swf_SetTagPos(t,now);
+}
+
+int swf_ButtonPostProcess(TAG * t,int anz_action)
+{ if (swf_GetTagID(t)==ST_DEFINEBUTTON2)
+ { U32 oldTagPos;
+ U32 offsetpos;
+
+ oldTagPos = swf_GetTagPos(t);
+
+ // scan DefineButton2 Record
+
+ swf_GetU16(t); // Character ID
+ swf_GetU8(t); // Flags;
+
+ offsetpos = swf_GetTagPos(t); // first offset
+ swf_GetU16(t);
+
+ while (swf_GetU8(t)) // state -> parse ButtonRecord
+ { swf_GetU16(t); // id
+ swf_GetU16(t); // layer
+ swf_GetMatrix(t,NULL); // matrix
+ swf_GetCXForm(t,NULL,1);// CXForm
+ }
+
+ swf_SetButtonOffset(t,offsetpos);
+
+ while(anz_action)
+ { U8 a;
+
+ offsetpos = swf_GetTagPos(t); // offset
+ swf_GetU16(t);
+
+ swf_GetU16(t); // condition
+
+ while ((a=swf_GetU8(t))) // skip action records
+ { if (a&0x80)
+ { U16 l = swf_GetU16(t);
+ swf_GetBlock(t,NULL,l);
+ }
+ }
+
+ if (--anz_action) swf_SetButtonOffset(t,offsetpos);
+ }
+
+ swf_SetTagPos(t,oldTagPos);
+ }
+ return 0;
+}