+static void writer_memwrite_finish(struct writer_t*w)
+{
+ free(w->internal);
+}
+void writer_init_memwriter(struct writer_t*w, void*data, int len)
+{
+ struct memwrite_t *mr;
+ mr = malloc(sizeof(struct memwrite_t));
+ mr->data = data;
+ mr->length = len;
+ memset(w, 0, sizeof(struct writer_t));
+ w->write = writer_memwrite_write;
+ w->finish = writer_memwrite_finish;
+ w->internal = (void*)mr;
+ w->type = WRITER_TYPE_FILE;
+ w->bitpos = 0;
+ w->mybyte = 0;
+ w->pos = 0;
+}
+
+/* ---------------------------- file writer ------------------------------- */
+
+struct filewrite_t
+{
+ int handle;
+ char free_handle;
+};
+
+static int writer_filewrite_write(struct writer_t*w, void* data, int len)
+{
+ struct filewrite_t * fw= (struct filewrite_t*)w->internal;
+ return write(fw->handle, data, len);
+}
+static void writer_filewrite_finish(struct writer_t*w)
+{
+ struct filewrite_t *mr = (struct filewrite_t*)w->internal;
+ if(mr->free_handle)
+ close(mr->handle);
+ free(mr);
+}
+void writer_init_filewriter(struct writer_t*w, int handle)
+{
+ struct filewrite_t *mr = malloc(sizeof(struct filewrite_t));
+ mr->handle = handle;
+ mr->free_handle = 0;
+ memset(w, 0, sizeof(struct writer_t));
+ w->write = writer_filewrite_write;
+ w->finish = writer_filewrite_finish;
+ w->internal = mr;
+ w->type = WRITER_TYPE_FILE;
+ w->bitpos = 0;
+ w->mybyte = 0;
+ w->pos = 0;
+}
+void writer_init_filewriter2(struct writer_t*w, char*filename)
+{
+ int fi = open("movie.swf",
+#ifdef O_BINARY
+ O_BINARY|
+#endif
+ O_WRONLY|O_CREAT|O_TRUNC, 0644);
+ writer_init_filewriter(w, fi);
+ ((struct filewrite_t*)w->internal)->free_handle = 1;
+}
+
+/* ---------------------------- zlibinflate writer -------------------------- */
+