Pro Linear_Code,P,$ ;P-Matrix required input GENERATOR=G,$ ;Generator matrix output PARITY=H,$ ;Parity check matrix output CODE=code,$ ;Codeword array output SARRAY=std,$ ;Standard array in numerical form STDSTR=stdstr ;Standard array in string form Psize=Size(P) k=Psize[2] r=Psize[1] n=k+r G=Byte([Identity(Psize[2]),P]) H=Transpose(Byte([[P],[Identity(Psize[1])]])) ;Generate the code array code=BytArr(n,2^k) FOR m=0,2^k-1 DO BEGIN v=BytArr(k) FOR b=0,k-1 DO v[b]=(m AND 2^b) GT 0 code[*,m]=v##G MOD 2 END std=BytArr(n*2^k,2^(n-k)) stdstr=StrArr(2^k+1,2^(n-k)) stdstr[0,0]=STRCOMPRESS(String(Replicate(0B,r),/Print),/REMOVE_ALL) FOR i=0,2^k-1 DO $ stdstr(i+1,0)=StrCompress(String(code[*,i],/Print),/Remove_All) std[*,0]=code[*] ;code is the first row of the standard array FOR m=1,2^r-1 DO BEGIN ;First find the coset leader for each syndrome coset=BytArr(n,2^k) ;Initialize coset array s=BytArr(r) ;Initialize syndrome array FOR b=0,r-1 DO s[b]=(m AND 2^b) GT 0 ;Construct the syndrome t=[Replicate(0B,k),s]##Transpose(H) MOD 2 coset[*,0]=[Replicate(0B,k),t] ;A coset element ;Now construct the coset. We still don't know the min wt element. FOR i=1,2^k-1 DO coset[*,i]=(coset[*,0]+code[*,i]) MOD 2 ;Search for the minimum wt element. wt=BytArr(2^k) For i=0,2^k-1 DO wt[i]=TOTAL(coset[*,i]) isrt=Sort(wt) cleader=coset[*,isrt[0]] ;Leader is min wt element ;Now construct row m of the standard array FOR i=0,2^k-1 DO std[i*n:i*n+n-1,m]=(cleader+code[*,i]) MOD 2 stdstr[0,m]=STRCOMPRESS(String(s,/Print),/REMOVE_ALL) FOR i=0,2^k-1 DO $ stdstr[i+1,m]=StrCompress(String(std[i*n:i*n+n-1,m],/Print)$ ,/Remove_All) ENDFOR END