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 
58 
59 /* sets the defined flag in this block */
60 void SWFBlock_setDefined(SWFBlock block);
61 
62 /* returns true if the block has been defined- i.e., written to the file */
63 BOOL SWFBlock_isDefined(SWFBlock block);
64 
65 /* returns the byte length of this block */
66 int SWFBlock_getLength(SWFBlock block);
67 
68 /* destroy this block by calling its destructor */
69 void destroySWFBlock(SWFBlock block);
70 
71 /* calls the block's completion method and returns its byte length */
72 int completeSWFBlock(SWFBlock block);
73 
74 /* writes this block to the given output method */
75 int writeSWFBlockToMethod(SWFBlock block, SWFByteOutputMethod method,
76                           void *data);
77 
78 /* initialize character values to something sane */
79 void SWFBlockInit(SWFBlock block);
80 
81 /* return a new ShowFrame block */
82 SWFBlock newSWFShowFrameBlock();
83 
84 /* return a new End block */
85 SWFBlock newSWFEndBlock();
86 
87 /* return a new Protect block */
88 SWFBlock newSWFProtectBlock();
89 
90 /* return a new empty block */
91 SWFBlock newEmptySWFBlock();
92 
93 /* return the block's type */
94 SWFBlocktype SWFBlock_getType(SWFBlock block);
95 
96 #endif /* SWF_BLOCK_H_INCLUDED */
97