#! /usr/bin/env python3

def deinterlace( number):
    mask = 0x80000000

    even = 0
    odd = 0

    while( mask > 0):
        even = even << 1
        if ( mask & number) > 0:
            even += 1
        mask >>= 1

        odd = odd << 1
        if (mask & number) > 0:
            odd += 1
        mask >>= 1

    return { 'even':even, 'odd':odd}

def test():
    for index in range( 16):
        e = deinterlace( index)['even']
        o = deinterlace( index)['odd']
        print( "{0:04b}:  {1:04b}  {2:04b}".format( index, e, o))

def print_list( l,header, footer):
    print( header)
    for index, e in enumerate( l):
        print( "{0:2d}".format( e), end=''),
        if index < len( l) - 1:
            print( ",", end='')
        if( index % 16) == 15:
            print( "")
    print( footer)

#test()
#exit()

evens = [deinterlace( x)['even'] for x in range( 256)]
odds  = [deinterlace( x)['odd']  for x in range( 256)]

print( "#ifndef DEINTERLEAVE_H")
print( "#define DEINTERLEAVE_H")
print( "#include <inttypes.h>")
print( "#include <avr/pgmspace.h>")
print_list( evens, "const uint8_t even_bits[] PROGMEM = {", "};")
print_list( odds,  "const uint8_t odd_bits[]  PROGMEM = {", "};")
print( "#endif //DEINTERLEAVE_H")
