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 }