+/* ---------------------------- file writer ------------------------------- */
+
+typedef struct
+{
+ FILE*fi;
+} filewrite_t;
+static int writer_filewrite_write(writer_t*w, void* data, int len)
+{
+ filewrite_t * fw= (filewrite_t*)w->internal;
+ return fwrite(data, len, 1, fw->fi);
+}
+static void writer_filewrite_finish(writer_t*w)
+{
+ filewrite_t *mr = (filewrite_t*)w->internal;
+ fclose(mr->fi);
+ free(w->internal);
+ memset(w, 0, sizeof(writer_t));
+}
+writer_t*writer_init_filewriter(char*filename)
+{
+ writer_t*w = malloc(sizeof(writer_t));
+ FILE*fi = fopen(filename, "wb");
+ filewrite_t *mr = (filewrite_t *)malloc(sizeof(filewrite_t));
+ mr->fi = fi;
+ memset(w, 0, sizeof(writer_t));
+ w->write = writer_filewrite_write;
+ w->finish = writer_filewrite_finish;
+ w->internal = mr;
+ return w;
+}
+