SUB setrightbits (bits(),e,n) IF e = 0 OR n <= 0 THEN EXIT SUB DIM bits2(0) MAT REDIM bits2(1 TO e) FOR i = 1 TO e LET bits2(i) = bits(i) NEXT i FOR i = 1 TO e-1 IF bits(i) = 1 THEN LET j = i+1 DO WHILE j <= i+n AND j <= e LET bits2(j) = 1 LET j = j+1 LOOP END IF NEXT i FOR i = 1 TO e LET bits(i) = bits2(i) NEXT i END SUB LET b$ = "010000000000100000000010000000010000000100000010000010000100010010" DIM tests$(8, 2) LET tests$(1, 1) = "1000" LET tests$(1, 2) = "2" LET tests$(2, 1) = "0100" LET tests$(2, 2) = "2" LET tests$(3, 1) = "0010" LET tests$(3, 2) = "2" LET tests$(4, 1) = "0000" LET tests$(4, 2) = "2" LET tests$(5, 1) = b$ LET tests$(5, 2) = "0" LET tests$(6, 1) = b$ LET tests$(6, 2) = "1" LET tests$(7, 1) = b$ LET tests$(7, 2) = "2" LET tests$(8, 1) = b$ LET tests$(8, 2) = "3" FOR k = 1 TO 8 DIM bits(1) MAT REDIM bits(1 TO LEN(tests$(k, 1))) FOR i = 1 TO LEN(tests$(k, 1)) LET bits(i) = VAL((tests$(k, 1))[i:i+1-1]) NEXT i LET ub = UBOUND(bits) LET n = VAL(tests$(k, 2)) PRINT USING "n = #; Width e = ##:": n, ub PRINT " Input b: "; tests$(k, 1) CALL setrightbits (bits(), ub, n) PRINT " Result: "; FOR i = 1 TO ub PRINT STR$(bits(i)); NEXT i PRINT PRINT NEXT k END