Blame scripts/specBytesToCode.py

Packit Service 5a9772
#!/usr/bin/python
Packit Service 5a9772
#
Packit Service 5a9772
#  A script to convert blob from the MS spec to array of byte to use in unitary tests
Packit Service 5a9772
#
Packit Service 5a9772
#       00000000 c7 01 00 01 20 54 e2
Packit Service 5a9772
#       00000008 c7 01 00 01 20 54 e2
Packit Service 5a9772
#    taken from the spec, will give:
Packit Service 5a9772
#       0xc7, 0x01, 0x00, 0x01, 0x20, 0x54, 0xe2,
Packit Service 5a9772
#       0xc7, 0x01, 0x00, 0x01, 0x20, 0x54, 0xe2,
Packit Service 5a9772
#
Packit Service 5a9772
#   Notes:
Packit Service 5a9772
#       * the script reads the two first lines to detect the number of items per lines, so you need a blob with at least 2 lines
Packit Service 5a9772
#       * the script detects if items are hex values by searching for + or -
Packit Service 5a9772
#
Packit Service 5a9772
#    sample usage:
Packit Service 5a9772
#     $ python scripts/specBytesToCode.py < image.txt > image.c
Packit Service 5a9772
#     then go edit image.c and paste that in your code 
Packit Service 5a9772
import sys
Packit Service 5a9772
Packit Service 5a9772
Packit Service 5a9772
def getOffset(l):
Packit Service 5a9772
    token = l.split(' ')[0]
Packit Service 5a9772
    return int(token, 16) 
Packit Service 5a9772
    
Packit Service 5a9772
def isHex(l):
Packit Service 5a9772
    return l.find('+') == -1 and l.find('-') == -1
Packit Service 5a9772
Packit Service 5a9772
if __name__ == '__main__':
Packit Service 5a9772
    
Packit Service 5a9772
    lines = []
Packit Service 5a9772
    itemPerLine = 16
Packit Service 5a9772
    doHex = True
Packit Service 5a9772
    
Packit Service 5a9772
    # parse the offset to know how many items per line we have
Packit Service 5a9772
    l1 = sys.stdin.readline().strip()
Packit Service 5a9772
    l2 = sys.stdin.readline().strip()
Packit Service 5a9772
    itemsPerLine = getOffset(l2) - getOffset(l1)
Packit Service 5a9772
    
Packit Service 5a9772
    #
Packit Service 5a9772
    doHex = isHex(l1)
Packit Service 5a9772
    
Packit Service 5a9772
    for l in [l1, l2] + sys.stdin.readlines():  
Packit Service 5a9772
        # 00000000 c7 01 00 01 20 54 e2 cc 00 jh.kjkjhkhk
Packit Service 5a9772
        l = l.strip() # in case we have spaces before the offset
Packit Service 5a9772
        pos = l.find(' ')
Packit Service 5a9772
        l = l[pos+1:]
Packit Service 5a9772
        items = []
Packit Service 5a9772
        
Packit Service 5a9772
        tokens = l.strip().split(' ')
Packit Service 5a9772
        ntokens = 0
Packit Service 5a9772
        for t in tokens:
Packit Service 5a9772
            if not t: # empty token
Packit Service 5a9772
                continue
Packit Service 5a9772
            
Packit Service 5a9772
            if ntokens == itemPerLine:
Packit Service 5a9772
                break
Packit Service 5a9772
            
Packit Service 5a9772
            item = ''
Packit Service 5a9772
            if doHex:
Packit Service 5a9772
                item += '0x'
Packit Service 5a9772
            item += t
Packit Service 5a9772
            
Packit Service 5a9772
            items.append(item)
Packit Service 5a9772
            
Packit Service 5a9772
            ntokens += 1
Packit Service 5a9772
    
Packit Service 5a9772
        lines.append(', '.join(items))
Packit Service 5a9772
    
Packit Service 5a9772
    print(",\n".join(lines))