1 /*
2     Ming, an SWF output library
3     Copyright (C) 2001  Opaque Industries - http://www.opaque.net/
4 
5     This library is free software; you can redistribute it and/or
6     modify it under the terms of the GNU Lesser General Public
7     License as published by the Free Software Foundation; either
8     version 2.1 of the License, or (at your option) any later version.
9 
10     This library is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13     Lesser General Public License for more details.
14 
15     You should have received a copy of the GNU Lesser General Public
16     License along with this library; if not, write to the Free Software
17     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18 */
19 
20 /* block.h
21  *
22  * $Id$
23  *
24  * Notice: This header file contains declarations of functions and types that
25  * are just used internally. All library functions and types that are supposed
26  * to be publicly accessable are defined in ./src/ming.h.
27  */
28 
29 #ifndef SWF_BLOCK_H_INCLUDED
30 #define SWF_BLOCK_H_INCLUDED
31 
32 #include "ming.h"
33 #include "blocktypes.h"
34 #include "libming.h"
35 
36 #define BLOCK(b) ((SWFBlock)(b))
37 
38 typedef void (*writeSWFBlockMethod)(SWFBlock block,
39 				    SWFByteOutputMethod method, void *data);
40 typedef int (*completeSWFBlockMethod)(SWFBlock block);
41 
42 typedef void (*destroySWFBlockMethod)(SWFBlock block);
43 
44 
45 struct SWFBlock_s
46 {
47   SWFBlocktype type;
48 
49   writeSWFBlockMethod writeBlock;
50   completeSWFBlockMethod complete;
51   destroySWFBlockMethod dtor;
52 
53   int length;
54   byte isDefined;
55   byte completed;
56 
57   int swfVersion;
58 };
59 
60 /* sets the defined flag in this block */
61 void SWFBlock_setDefined(SWFBlock block);
62 
63 /* returns true if the block has been defined- i.e., written to the file */
64 BOOL SWFBlock_isDefined(SWFBlock block);
65 
66 /* returns the byte length of this block */
67 int SWFBlock_getLength(SWFBlock block);
68 
69 /* destroy this block by calling its destructor */
70 void destroySWFBlock(SWFBlock block);
71 
72 /* calls the block's completion method and returns its byte length */
73 int completeSWFBlock(SWFBlock block);
74 
75 /* writes this block to the given output method */
76 int writeSWFBlockToMethod(SWFBlock block, SWFByteOutputMethod method,
77                           void *data);
78 
79 /* initialize character values to something sane */
80 void SWFBlockInit(SWFBlock block);
81 
82 /* return a new ShowFrame block */
83 SWFBlock newSWFShowFrameBlock();
84 
85 /* return a new End block */
86 SWFBlock newSWFEndBlock();
87 
88 /* return a new Protect block */
89 SWFBlock newSWFProtect(const char *);
90 
91 /* return a new empty block */
92 SWFBlock newEmptySWFBlock();
93 
94 /* return the block's type */
95 SWFBlocktype SWFBlock_getType(SWFBlock block);
96 
97 #endif /* SWF_BLOCK_H_INCLUDED */
98