#include #include #define bfl(x) ((x)&~7) // gets the floor of byte boundary #define bcl(x) (bfl((x)+7)) // gets the ceiling of byte boundary #define byte(x) ((x)>>3) // gets the byte position #define ofs(x) ((x)&7) // gets the offset within the byte #define getbits(pos,len) \ ((*((unsigned long *) &data[byte(pos)])>>ofs(pos))&((1<<(len))-1)) char *data=NULL; unsigned long length=0; /***************************************************************************/ int printb(void) { int i; for(i=0;i0;x++,length+=l*8) { if(!(tptr=malloc(x*1000+l*sizeof(char)))) return 1; memcpy(tptr,data,x*1000); memcpy(&tptr[x*1000],tmp,l); free(data); data=tptr; } return 0; } /***************************************************************************/ int savefile(FILE *f) { rewind(f); if(fwrite(data,sizeof(char),byte(bcl(length)),f)!=length) return 1; return 0; } /***************************************************************************/ int chgbits(int start,int size,unsigned long val) { unsigned long mask=(1<mask) return 1; val<<=ofs(start); mask<<=ofs(start); *olay=(*olay&~mask)|val; return 0; } /***************************************************************************/ int insbits(int start,int size) { int i; char *tmp; if(!(tmp=malloc(byte(bcl(length+size))))) return 1; else length+=size; memcpy(tmp,data,byte(start)+1); for(i=bcl(start+size);i