summaryrefslogtreecommitdiff
path: root/include/stream
diff options
context:
space:
mode:
Diffstat (limited to 'include/stream')
-rw-r--r--include/stream/crypt.h30
-rw-r--r--include/stream/file.h38
-rw-r--r--include/stream/filter.h87
-rw-r--r--include/stream/object.h126
4 files changed, 281 insertions, 0 deletions
diff --git a/include/stream/crypt.h b/include/stream/crypt.h
new file mode 100644
index 00000000..647a1eda
--- /dev/null
+++ b/include/stream/crypt.h
@@ -0,0 +1,30 @@
+/* md5 digests */
+
+typedef struct fz_md5_s fz_md5;
+
+struct fz_md5_s
+{
+ unsigned long state[4];
+ unsigned long count[2];
+ unsigned char buffer[64];
+};
+
+void fz_md5init(fz_md5 *state);
+void fz_md5update(fz_md5 *state, unsigned char *input, unsigned inlen);
+void fz_md5final(fz_md5 *state, unsigned char digest[16]);
+
+/* arc4 crypto */
+
+typedef struct fz_arc4_s fz_arc4;
+
+struct fz_arc4_s
+{
+ unsigned x;
+ unsigned y;
+ unsigned char state[256];
+};
+
+void fz_arc4init(fz_arc4 *state, unsigned char *key, unsigned len);
+unsigned char fz_arc4next(fz_arc4 *state);
+void fz_arc4encrypt(fz_arc4 *state, unsigned char *dest, unsigned char *src, unsigned len);
+
diff --git a/include/stream/file.h b/include/stream/file.h
new file mode 100644
index 00000000..c87ccf5d
--- /dev/null
+++ b/include/stream/file.h
@@ -0,0 +1,38 @@
+typedef struct fz_file_s fz_file;
+
+enum { FZ_READ, FZ_WRITE, FZ_APPEND };
+
+struct fz_file_s
+{
+ int mode; /* FZ_READ or FZ_WRITE */
+ int fd;
+ int depth;
+ fz_filter *filter;
+ fz_buffer *in;
+ fz_buffer *out;
+ fz_error *error;
+};
+
+fz_error *fz_openfile(fz_file **filep, char *path, int mode);
+fz_error *fz_openbuffer(fz_file **filep, fz_buffer *buf, int mode);
+fz_error *fz_pushfilter(fz_file *file, fz_filter *filter);
+void fz_popfilter(fz_file *file);
+void fz_closefile(fz_file *file);
+fz_error *fz_ferror(fz_file *f);
+
+int fz_seek(fz_file *f, int ofs, int whence);
+int fz_tell(fz_file *f);
+
+int fz_readbyte(fz_file *f);
+int fz_peekbyte(fz_file *f);
+int fz_readline(fz_file *f, char *buf, int n);
+int fz_read(fz_file *f, unsigned char *buf, int n);
+
+fz_error *fz_readfile(fz_buffer **bufp, fz_file *file);
+
+int fz_printstring(fz_file *f, char *s);
+int fz_printobj(fz_file *f, fz_obj *o, int tight);
+int fz_print(fz_file *f, char *fmt, ...);
+int fz_write(fz_file *f, unsigned char *buf, int n);
+int fz_flush(fz_file *f);
+
diff --git a/include/stream/filter.h b/include/stream/filter.h
new file mode 100644
index 00000000..bb33b8eb
--- /dev/null
+++ b/include/stream/filter.h
@@ -0,0 +1,87 @@
+typedef struct fz_filter_s fz_filter;
+typedef struct fz_buffer_s fz_buffer;
+
+#define FZ_BUFSIZE (32 * 1024)
+
+#define fz_ioneedin (&fz_kioneedin)
+#define fz_ioneedout (&fz_kioneedout)
+#define fz_iodone (&fz_kiodone)
+
+extern fz_error fz_kioneedin;
+extern fz_error fz_kioneedout;
+extern fz_error fz_kiodone;
+
+#define FZ_NEWFILTER(TYPE,VAR,NAME) \
+ fz_error * fz_process ## NAME (fz_filter*,fz_buffer*,fz_buffer*); \
+ void fz_drop ## NAME (fz_filter*); \
+ TYPE *VAR; \
+ *fp = fz_malloc(sizeof(TYPE)); \
+ if (!*fp) return fz_outofmem; \
+ (*fp)->refs = 1; \
+ (*fp)->process = fz_process ## NAME ; \
+ (*fp)->drop = fz_drop ## NAME ; \
+ (*fp)->consumed = 0; \
+ (*fp)->produced = 0; \
+ (*fp)->count = 0; \
+ VAR = (TYPE*) *fp
+
+struct fz_filter_s
+{
+ int refs;
+ fz_error* (*process)(fz_filter *filter, fz_buffer *in, fz_buffer *out);
+ void (*drop)(fz_filter *filter);
+ int consumed;
+ int produced;
+ int count;
+};
+
+struct fz_buffer_s
+{
+ int refs;
+ int ownsdata;
+ unsigned char *bp;
+ unsigned char *rp;
+ unsigned char *wp;
+ unsigned char *ep;
+ int eof;
+};
+
+fz_error *fz_process(fz_filter *f, fz_buffer *in, fz_buffer *out);
+fz_filter *fz_keepfilter(fz_filter *f);
+void fz_dropfilter(fz_filter *f);
+
+fz_error *fz_newnullfilter(fz_filter **fp, int len);
+fz_error *fz_newarc4filter(fz_filter **fp, unsigned char *key, unsigned keylen);
+fz_error *fz_newpipeline(fz_filter **fp, fz_filter *head, fz_filter *tail);
+
+fz_error *fz_chainpipeline(fz_filter **fp, fz_filter *head, fz_filter *tail, fz_buffer *buf);
+void fz_unchainpipeline(fz_filter *pipe, fz_filter **oldfp, fz_buffer **oldbp);
+
+fz_error *fz_newbuffer(fz_buffer **bufp, int size);
+fz_error *fz_newbufferwithdata(fz_buffer **bufp, unsigned char *data, int size);
+fz_error *fz_rewindbuffer(fz_buffer *buf);
+fz_error *fz_growbuffer(fz_buffer *buf);
+fz_buffer *fz_keepbuffer(fz_buffer *buf);
+void fz_dropbuffer(fz_buffer *buf);
+
+fz_error *fz_newa85d(fz_filter **filterp, fz_obj *param);
+fz_error *fz_newa85e(fz_filter **filterp, fz_obj *param);
+fz_error *fz_newahxd(fz_filter **filterp, fz_obj *param);
+fz_error *fz_newahxe(fz_filter **filterp, fz_obj *param);
+fz_error *fz_newrld(fz_filter **filterp, fz_obj *param);
+fz_error *fz_newrle(fz_filter **filterp, fz_obj *param);
+fz_error *fz_newdctd(fz_filter **filterp, fz_obj *param);
+fz_error *fz_newdcte(fz_filter **filterp, fz_obj *param);
+fz_error *fz_newfaxd(fz_filter **filterp, fz_obj *param);
+fz_error *fz_newfaxe(fz_filter **filterp, fz_obj *param);
+fz_error *fz_newflated(fz_filter **filterp, fz_obj *param);
+fz_error *fz_newflatee(fz_filter **filterp, fz_obj *param);
+fz_error *fz_newlzwd(fz_filter **filterp, fz_obj *param);
+fz_error *fz_newlzwe(fz_filter **filterp, fz_obj *param);
+fz_error *fz_newpredictd(fz_filter **filterp, fz_obj *param);
+fz_error *fz_newpredicte(fz_filter **filterp, fz_obj *param);
+fz_error *fz_newjbig2d(fz_filter **filterp, fz_obj *param);
+fz_error *fz_newjpxd(fz_filter **filterp, fz_obj *param);
+
+void fz_pushbackahxd(fz_filter *filter, fz_buffer *in, fz_buffer *out, int n);
+
diff --git a/include/stream/object.h b/include/stream/object.h
new file mode 100644
index 00000000..34b62f59
--- /dev/null
+++ b/include/stream/object.h
@@ -0,0 +1,126 @@
+typedef struct fz_obj_s fz_obj;
+typedef struct fz_keyval_s fz_keyval;
+
+typedef enum fz_objkind_e
+{
+ FZ_NULL,
+ FZ_BOOL,
+ FZ_INT,
+ FZ_REAL,
+ FZ_STRING,
+ FZ_NAME,
+ FZ_ARRAY,
+ FZ_DICT,
+ FZ_INDIRECT,
+ FZ_POINTER
+} fz_objkind;
+
+struct fz_keyval_s
+{
+ fz_obj *k;
+ fz_obj *v;
+};
+
+struct fz_obj_s
+{
+ unsigned short refs;
+ char kind; /* fz_objkind takes 4 bytes :( */
+ union
+ {
+ int b;
+ int i;
+ float f;
+ struct {
+ unsigned short len;
+ char buf[1];
+ } s;
+ char n[1];
+ struct {
+ int len;
+ int cap;
+ fz_obj **items;
+ } a;
+ struct {
+ char sorted;
+ int len;
+ int cap;
+ fz_keyval *items;
+ } d;
+ struct {
+ int oid;
+ int gid;
+ } r;
+ void *p;
+ } u;
+};
+
+fz_error *fz_newnull(fz_obj **op);
+fz_error *fz_newbool(fz_obj **op, int b);
+fz_error *fz_newint(fz_obj **op, int i);
+fz_error *fz_newreal(fz_obj **op, float f);
+fz_error *fz_newname(fz_obj **op, char *str);
+fz_error *fz_newstring(fz_obj **op, char *str, int len);
+fz_error *fz_newindirect(fz_obj **op, int oid, int gid);
+fz_error *fz_newpointer(fz_obj **op, void *p);
+
+fz_error *fz_newarray(fz_obj **op, int initialcap);
+fz_error *fz_newdict(fz_obj **op, int initialcap);
+fz_error *fz_copyarray(fz_obj **op, fz_obj *array);
+fz_error *fz_copydict(fz_obj **op, fz_obj *dict);
+fz_error *fz_deepcopyarray(fz_obj **op, fz_obj *array);
+fz_error *fz_deepcopydict(fz_obj **op, fz_obj *dict);
+
+fz_obj *fz_keepobj(fz_obj *obj);
+void fz_dropobj(fz_obj *obj);
+
+/* type queries */
+int fz_isnull(fz_obj *obj);
+int fz_isbool(fz_obj *obj);
+int fz_isint(fz_obj *obj);
+int fz_isreal(fz_obj *obj);
+int fz_isname(fz_obj *obj);
+int fz_isstring(fz_obj *obj);
+int fz_isarray(fz_obj *obj);
+int fz_isdict(fz_obj *obj);
+int fz_isindirect(fz_obj *obj);
+int fz_ispointer(fz_obj *obj);
+
+int fz_objcmp(fz_obj *a, fz_obj *b);
+
+/* silent failure, no error reporting */
+int fz_tobool(fz_obj *obj);
+int fz_toint(fz_obj *obj);
+float fz_toreal(fz_obj *obj);
+char *fz_toname(fz_obj *obj);
+char *fz_tostrbuf(fz_obj *obj);
+int fz_tostrlen(fz_obj *obj);
+int fz_tonum(fz_obj *obj);
+int fz_togen(fz_obj *obj);
+void *fz_topointer(fz_obj *obj);
+
+fz_error *fz_newnamefromstring(fz_obj **op, fz_obj *str);
+
+int fz_arraylen(fz_obj *array);
+fz_obj *fz_arrayget(fz_obj *array, int i);
+fz_error *fz_arrayput(fz_obj *array, int i, fz_obj *obj);
+fz_error *fz_arraypush(fz_obj *array, fz_obj *obj);
+
+int fz_dictlen(fz_obj *dict);
+fz_obj *fz_dictgetkey(fz_obj *dict, int idx);
+fz_obj *fz_dictgetval(fz_obj *dict, int idx);
+fz_obj *fz_dictget(fz_obj *dict, fz_obj *key);
+fz_obj *fz_dictgets(fz_obj *dict, char *key);
+fz_obj *fz_dictgetsa(fz_obj *dict, char *key, char *abbrev);
+fz_error *fz_dictput(fz_obj *dict, fz_obj *key, fz_obj *val);
+fz_error *fz_dictputs(fz_obj *dict, char *key, fz_obj *val);
+fz_error *fz_dictdel(fz_obj *dict, fz_obj *key);
+fz_error *fz_dictdels(fz_obj *dict, char *key);
+void fz_sortdict(fz_obj *dict);
+
+int fz_sprintobj(char *s, int n, fz_obj *obj, int tight);
+void fz_debugobj(fz_obj *obj);
+
+fz_error *fz_parseobj(fz_obj **objp, char *s);
+fz_error *fz_packobj(fz_obj **objp, char *fmt, ...);
+fz_error *fz_unpackobj(fz_obj *obj, char *fmt, ...);
+