shithub: pdffs

ref: 76bd9fac44e61eb25333f79206175db9485a3d9c
dir: pdffs/f_ascii85.c

View raw version
#include <u.h>
#include <libc.h>
#include "pdf.h"

static int
flreadall(void *aux, Buffer *bi, Buffer *bo)
{
	int i, j, insz;
	uchar *in;
	u32int x;

	USED(aux);

	in = bufdata(bi, &insz);
	for(i = j = 0; i < insz; i++){
		if(!isws(in[i]))
			in[j++] = in[i];
	}
	insz = j;
	for(i = 0; i < insz; i += 5){
		for(x = 0, j = 0; j < 5; j++)
			x = x*85 + ((i+j < insz ? in[i+j] : 'u') - 33);
		bufput(bo, (uchar*)&x+3, 1);
		bufput(bo, (uchar*)&x+2, 1);
		bufput(bo, (uchar*)&x+1, 1);
		bufput(bo, (uchar*)&x+0, 1);
	}
	in = bufdata(bo, &insz);

	return 0;
}

Filter filterASCII85 = {
	.name = "ASCII85Decode",
	.readall = flreadall,
};