Mirai's Miscellaneous Misadventures

M49 / core / packbits.c

/* license: AGPLv3 or later */
/* copyright 2024 zamfofex */

#include <mimimi.h>

void mimimi_unpack_bits(int size, unsigned char *unpacked, unsigned char *packed)
{
	int i, j, k, n;
	
	i = 0;
	j = 0;
	
	while (j < size)
	{
		n = packed[i++];
		if (n == 128) continue;
		if (n > 128) n -= 256;
		
		if (n > 0)
		{
			for (k = 0 ; k <= n ; k++)
				unpacked[j++] = packed[i++];
		}
		else
		{
			for (k = 0 ; k <= -n ; k++)
				unpacked[j++] = packed[i];
			i++;
		}
	}
}