implemented .swc import
[swftools.git] / lib / bitio.c
index 442bf48..bf21000 100644 (file)
@@ -71,6 +71,9 @@ static int reader_fileread(reader_t*reader, void* data, int len)
 }
 static void reader_fileread_dealloc(reader_t*r)
 {
+    if(r->type == READER_TYPE_FILE2) {
+       close((ptroff_t)r->internal);
+    }
     memset(r, 0, sizeof(reader_t));
 }
 void reader_init_filereader(reader_t*r, int handle)
@@ -83,6 +86,16 @@ void reader_init_filereader(reader_t*r, int handle)
     r->bitpos = 8;
     r->pos = 0;
 }
+void reader_init_filereader2(reader_t*r, const char*filename)
+{
+    int fi = open(filename,
+#ifdef O_BINARY
+           O_BINARY|
+#endif
+           O_RDONLY);
+    reader_init_filereader(r, fi);
+    r->type = READER_TYPE_FILE2;
+}
 
 /* ---------------------------- mem reader ------------------------------- */
 
@@ -123,6 +136,28 @@ void reader_init_memreader(reader_t*r, void*newdata, int newlength)
     r->pos = 0;
 } 
 
+/* ---------------------------- zzip reader ------------------------------ */
+#ifdef HAVE_ZZIP
+static int reader_zzip_read(reader_t*reader, void* data, int len) 
+{
+    return zzip_file_read((ZZIP_FILE*)reader->internal, data, len);
+}
+static void reader_zzip_dealloc(reader_t*reader)
+{
+    memset(reader, 0, sizeof(reader_t));
+}
+void reader_init_zzipreader(reader_t*r,ZZIP_FILE*z)
+{
+    r->read = reader_zzip_read;
+    r->dealloc = reader_zzip_dealloc;
+    r->internal = z;
+    r->type = READER_TYPE_ZZIP;
+    r->mybyte = 0;
+    r->bitpos = 8;
+    r->pos = 0;
+}
+#endif
+
 /* ---------------------------- mem writer ------------------------------- */
 
 typedef struct _memwrite
@@ -294,7 +329,7 @@ void writer_init_filewriter(writer_t*w, int handle)
 }
 void writer_init_filewriter2(writer_t*w, char*filename)
 {
-    int fi = open("movie.swf",
+    int fi = open(filename,
 #ifdef O_BINARY
            O_BINARY|
 #endif