REM CONVUL.BAS Jim FitzSimons 23 May, 2000 FUNCTION PBMAIN PRINT "Number of information bits? "; LINE INPUT temp$ bi& = VAL(temp$) PRINT "Number of errors? "; LINE INPUT temp$ fec% = VAL(temp$) n& = 2^bi& - 1 g1& = &H79 g2& = &H5B bi2& = bi& + 6 m&& = 2^bi2& - 1 PRINT bi&;bi2&;m&& DIM c&&(n&) OPEN "CONVUL.OUT" FOR OUTPUT AS #1 FOR i& = 0 TO n& r& = i& SHIFT LEFT r&,6 o&& = 0&& FOR j% = 1 TO bi2& t1%=g1& AND r& t2%=g2& AND r& t1% = BIT(t1%,6) XOR BIT(t1%,5) XOR BIT(t1%,4) XOR BIT(t1%,3) XOR BIT(t1%,0) t2% = BIT(t2%,6) XOR BIT(t2%,4) XOR BIT(t2%,3) XOR BIT(t2%,1) XOR BIT(t2%,0) XOR 1 SHIFT LEFT o&&,1 o&& = o&& OR t1% SHIFT LEFT o&&,1 o&& = o&& OR t2% SHIFT RIGHT r&,1 NEXT j% c&&(i&)=o&& o1&& = o&& SHIFT RIGHT o1&&,bi2& o2&& = o&& AND m&& PRINT #1,BIN$(o1&&,bi2&);BIN$(o2&&,bi2&) NEXT i& CLOSE #1 fec2% = 2* fec% FOR i& = 0 TO n& - 1 FOR jj& = i& + 1 TO n& k&& = c&&(i&) XOR c&&(jj&) dif% = 0 FOR l% = 1 TO 2*bi2& IF (k&& AND 1&&) <> 0&& THEN INCR dif% IF dif% > fec2% THEN EXIT FOR END IF SHIFT RIGHT k&&,1 NEXT l% IF dif% < fec2% THEN EXIT FOR NEXT jj& IF dif% < fec2% THEN EXIT FOR NEXT i& IF dif% < fec2% THEN PRINT "These codes failed to correct ";fec%;" errors." PRINT i&;jj&;" "; o1&& = c&&(i&) SHIFT RIGHT o1&&,bi2& o2&& = c&&(i&) AND m&& PRINT BIN$(o1&&,bi2&);BIN$(o2&&,bi2&);" " o1&& = c&&(jj&) SHIFT RIGHT o1&&,bi2& o2&& = c&&(jj&) AND m&& PRINT BIN$(o1&&,bi2&);BIN$(o2&&,bi2&) ELSE PRINT "These codes will correct ";fec%;" errors." END IF END FUNCTION