/******************************************************************************/ /* */ /* COMPUTE PARITY VECTORS */ /* 08/01/11 (dkc) */ /* */ /******************************************************************************/ #include <math.h> unsigned int bitcnt(unsigned int a); unsigned int pack(unsigned int a, unsigned int s, unsigned int l); far unsigned int error[4]; far unsigned int output[8000]; far unsigned char flag[65536*8]; int main () { unsigned int l=8; // length of parity vector unsigned int n=4; // number of 1's in parity vector unsigned int i,j,b,count,iters; error[0]=0; error[1]=0; error[2]=0; error[3]=0; if (l>21) { error[3]=1; goto zskip; } count=0; iters=1<<l; for (i=0; i<8000; i++) output[i]=0; for (i=0;i<65536*8; i++) flag[i]=0; for (i=0; i<iters; i++) { if (flag[i]!=0) continue; b=bitcnt(i); if (b!=n) continue; output[count]=i; // parity vector count=count+1; if (count>7999) { error[3]=1; goto zskip; } for (j=1; j<l; j++) { b=pack(i, l, j); flag[b]=1; } } zskip: error[0]=count; return(0); }