00001
00005 #include <sys/types.h>
00006 #include <sys/stat.h>
00007 #include <fcntl.h>
00008 #include <unistd.h>
00009 #include <stdlib.h>
00010 #include <stdio.h>
00011 #include <string.h>
00012
00013 #include <inttypes.h>
00014 #include <strings.h>
00015 #include <globals.h>
00016
00017 #define ANDUPTO(X) \
00018 ((Char)((1<<((X)-1)) | (1<<((X)-2)) | (1<<((X)-3)) | (1<<((X)-4)) | \
00019 (1<<((X)-5)) | (1<<((X)-6)) | (1<<((X)-7)) | (1<<((X)-8))))
00020
00021 void
00022 DumpChar(Char value)
00023 {
00024 int i;
00025 for (i = 7; i >= 0; i--) {
00026 printf("%c", (value & (1<<i)) == (1<<i) ? '1' : '0');
00027 }
00028 }
00029
00030 void
00031 DumpBuffer(Char *buffer, UInt32 len)
00032 {
00033 int ap = 0;
00034 printf("**\n");
00035 while(len--) {
00036 if (ap == 4) {
00037 ap = 0;
00038 printf("\n");
00039 }
00040 printf("[");
00041 DumpChar(*buffer);
00042 printf("]");
00043 buffer++;
00044 ap++;
00045 }
00046 printf("\n**\n");
00047 }
00048
00049 int
00050 main(int argc, char **argv)
00051 {
00052 char *sbuf;
00053 char *dbuf2 = NULL;
00054 char *dbuf = NULL;
00055 int len = 32;
00056 int nbits;
00057 int asb;
00058
00059 sbuf = malloc(len);
00060 dbuf2 = malloc(len);
00061 for (nbits = 7; nbits >= 1; nbits--) {
00062 printf("And == %x\n", ANDUPTO(nbits));
00063 for (asb = 0; asb < len; asb++) {
00064 sbuf[asb] = asb & ANDUPTO(nbits);
00065 }
00066 if (dbuf) {
00067 free(dbuf);
00068 }
00069
00070 bzero(dbuf2, len);
00071 dbuf = calloc(1, len / (8 - nbits));
00072 printf("\nUnpacked\n");
00073 DumpBuffer(sbuf, len);
00074
00075 PackBits(sbuf, dbuf, nbits, len);
00076 printf("\nPacked\n");
00077 DumpBuffer(dbuf, len / (8 - nbits));
00078 UnpackBits(dbuf, dbuf2, nbits, len);
00079 printf("\nUnpacked\n");
00080 DumpBuffer(dbuf2, len);
00081 }
00082 free(sbuf);
00083 free(dbuf2);
00084 if (dbuf) free(dbuf);
00085 return (0);
00086 }