ref: a105fe96aac770cd3c939c7744715a8d8982795f
parent: ac1954db2882d7e6ff01eb490e68de7294424b4d
	author: Sigrid Solveig Haflínudóttir <ftrvxmtrx@gmail.com>
	date: Sat Nov 21 07:56:47 EST 2020
	
keep filters in their own files
--- /dev/null
+++ b/f_ascii85.c
@@ -1,0 +1,7 @@
+#include <u.h>
+#include <libc.h>
+#include "pdf.h"
+
+Filter filterASCII85 = {+ .name = "ASCII85Decode",
+};
--- /dev/null
+++ b/f_asciihex.c
@@ -1,0 +1,7 @@
+#include <u.h>
+#include <libc.h>
+#include "pdf.h"
+
+Filter filterASCIIHex = {+ .name = "ASCIIHexDecode",
+};
--- /dev/null
+++ b/f_ccittfax.c
@@ -1,0 +1,7 @@
+#include <u.h>
+#include <libc.h>
+#include "pdf.h"
+
+Filter filterCCITTFax = {+ .name = "CCITTFaxDecode",
+};
--- /dev/null
+++ b/f_crypt.c
@@ -1,0 +1,7 @@
+#include <u.h>
+#include <libc.h>
+#include "pdf.h"
+
+Filter filterCrypt = {+ .name = "CryptDecode",
+};
--- /dev/null
+++ b/f_dct.c
@@ -1,0 +1,16 @@
+#include <u.h>
+#include <libc.h>
+#include "pdf.h"
+
+static int
+flreadall(void *aux, Buffer *bi, Buffer *bo)
+{+ USED(aux);
+ bufput(bo, bi->b, bi->sz);
+ return 0;
+}
+
+Filter filterDCT = {+ .name = "DCTDecode",
+ .readall = flreadall,
+};
--- a/f_flate.c
+++ b/f_flate.c
@@ -80,8 +80,8 @@
return bufget(aux, &c, 1) == 1 ? c : -1;
}
-int
-fFlate(void *aux, Buffer *bi, Buffer *bo)
+static int
+flreadall(void *aux, Buffer *bi, Buffer *bo)
 {int r, i, rows, n;
FlateParms *fp;
@@ -119,8 +119,8 @@
return r;
}
-int
-openFlate(Filter *f, Object *o)
+static int
+flopen(Filter *f, Object *o)
 {Object *parms;
FlateParms *fp;
@@ -147,8 +147,15 @@
return 0;
}
-void
-closeFlate(Filter *f)
+static void
+flclose(Filter *f)
 {free(f->aux);
}
+
+Filter filterFlate = {+ .name = "FlateDecode",
+ .readall = flreadall,
+ .open = flopen,
+ .close = flclose,
+};
--- /dev/null
+++ b/f_jbig2.c
@@ -1,0 +1,7 @@
+#include <u.h>
+#include <libc.h>
+#include "pdf.h"
+
+Filter filterJBIG2 = {+ .name = "JBIG2Decode",
+};
--- /dev/null
+++ b/f_jpx.c
@@ -1,0 +1,7 @@
+#include <u.h>
+#include <libc.h>
+#include "pdf.h"
+
+Filter filterJPX = {+ .name = "JPXDecode",
+};
--- /dev/null
+++ b/f_lzw.c
@@ -1,0 +1,7 @@
+#include <u.h>
+#include <libc.h>
+#include "pdf.h"
+
+Filter filterLZW = {+ .name = "LZWDecode",
+};
--- /dev/null
+++ b/f_runlength.c
@@ -1,0 +1,16 @@
+#include <u.h>
+#include <libc.h>
+#include "pdf.h"
+
+static int
+flreadall(void *aux, Buffer *bi, Buffer *bo)
+{+ USED(aux);
+ bufput(bo, bi->b, bi->sz);
+ return 0;
+}
+
+Filter filterRunLength = {+ .name = "RunLengthDecode",
+ .readall = flreadall,
+};
--- a/filter.c
+++ b/filter.c
@@ -4,29 +4,28 @@
/* 7.4 Filters */
-int fFlate(void *aux, Buffer *bi, Buffer *bo);
-int openFlate(Filter *f, Object *o);
-void closeFlate(Filter *f);
+extern Filter filterASCII85;
+extern Filter filterASCIIHex;
+extern Filter filterCCITTFax;
+extern Filter filterCrypt;
+extern Filter filterDCT;
+extern Filter filterFlate;
+extern Filter filterJBIG2;
+extern Filter filterJPX;
+extern Filter filterLZW;
+extern Filter filterRunLength;
-static int
-fCopy(void *aux, Buffer *bi, Buffer *bo)
-{- USED(aux);
- bufput(bo, bi->b, bi->sz);
- return 0;
-}
-
-static Filter filters[] = {-	{"ASCII85Decode", nil, nil, nil},-	{"ASCIIHexDecode", nil, nil, nil},-	{"CCITTFaxDecode", nil, nil, nil},-	{"CryptDecode", nil, nil, nil},-	{"DCTDecode", fCopy, nil, nil},-	{"FlateDecode", fFlate, openFlate, closeFlate},-	{"JBIG2Decode", nil, nil, nil},-	{"JPXDecode", nil, nil, nil},-	{"LZWDecode", nil, nil, nil},-	{"RunLengthDecode", nil, nil, nil},+static Filter *filters[] = {+ &filterASCII85,
+ &filterASCIIHex,
+ &filterCCITTFax,
+ &filterCrypt,
+ &filterDCT,
+ &filterFlate,
+ &filterJBIG2,
+ &filterJPX,
+ &filterLZW,
+ &filterRunLength,
};
Filter *
@@ -35,18 +34,18 @@
int i;
Filter *f;
- for(i = 0; i < nelem(filters) && strcmp(filters[i].name, name) != 0; i++);
+ for(i = 0; i < nelem(filters) && strcmp(filters[i]->name, name) != 0; i++);
 	if(i >= nelem(filters)){ 		werrstr("no such filter %q", name);return nil;
}
-	if(filters[i].readall == nil){+	if(filters[i]->readall == nil){ 		werrstr("filter %q not implemented", name);return nil;
}
if((f = malloc(sizeof(*f))) == nil)
return nil;
- memmove(f, &filters[i], sizeof(*f));
+ memmove(f, filters[i], sizeof(*f));
 	if(f->open != nil && f->open(f, o) != 0){free(f);
return nil;
--- a/mkfile
+++ b/mkfile
@@ -7,7 +7,17 @@
buffer.$O\
dict.$O\
eval.$O\
+ f_dct.$O\
+ f_ascii85.$O\
+ f_asciihex.$O\
+ f_ccittfax.$O\
+ f_crypt.$O\
+ f_dct.$O\
f_flate.$O\
+ f_jbig2.$O\
+ f_jpx.$O\
+ f_lzw.$O\
+ f_runlength.$O\
filter.$O\
main.$O\
misc.$O\
@@ -20,7 +30,6 @@
xref.$O\
HFILES=\
- pdf.h\
UPDATE=\
$HFILES\
--- a/object.c
+++ b/object.c
@@ -13,10 +13,10 @@
pdfobj(Pdf *pdf, Stream *s)
 {Object *o, *o2;
+ char b[16];
vlong off;
int c, tf;
Xref xref;
- char b[16];
o = o2 = nil;
do; while(isws(c = Sgetc(s)));
--
⑨