def extract_from_offset(dna, offset, level=1):
    result = ""
    gen = (dna[i] for i in xrange(offset, len(dna)))
    for l in xrange(level):
        gen = consts(gen)
    gen = nat(gen)
    for c in gen:
        if c == 255:
            result += "<EoL>"
            break
        if c in character:
            result += character[c]
        else:
            result += "<" + str(c) + ">"
    return result
def get_value(dna, offset, type):
    green_begin = dna.find(green_zone_marker)
    assert(green_begin > 0)
    start = green_begin + offset
    end = start + sizeof[type]
    
    print dna[start:end]
    
    # ugly abuse of iterator-based nat()
    iter = (b for b in dna[start:end])
    nat_list = list(nat(b for b in iter))
    assert(len(nat_list) == 1)
    result = nat_list[0]
    #assert(asnat(result, length=sizeof[type]) == dna[start:end])
    return result