Example #1
0
def run(fname):
    macrosesUnroll(fname)  # изготовит файл исходного кода
    import mFu

    # Обрабатываем файл с кодом
    ifile = fname
    # читаем
    string = IOOperations.getFileContent(ifile)
    commFree = delCom(string)

    # чистый от комментариев код - плоховато, но пусть пока
    commFreeList = commFree.split("\n")

    # замена в файлах
    i = 0
    f = io.open(fname, "w", encoding="utf-8")
    f.write(u"#include 	P18F8722.inc\n")
    for item in commFreeList:
        fini, type = testMacro(item, mFu.macDictFu)
        if fini:
            itemSplit = item.split()  # просто дробим
            args = getArgs(item, i)
            # print type
            unrollCode = mFu.macDictFu[type](args)
            unrollCode = unrollCode.replace("THIS", "_v2_HOT")
            f.write(unicode(unrollCode + "\n"))
            i += 1
        else:
            # просто пишем
            f.write(unicode(item) + u"\n")
    f.close()
    i = 0
Example #2
0
def getDefsList( dirForFound, cbFindCond, cbGetFileList, typeInFile, ofile ):
	# Создаем список найденных файлов
	fileList = cbGetFileList( dirForFound, typeInFile )
	
	# читаем файл и выбираем из него директивы
	f = io.open( ofile+'.h', 'w', encoding='utf-8')
	f.write(u'#-*- coding: utf-8 -*-\n')
	definedList = list('') # сюда складываем все
	for at in fileList:
		# содержимое
		string = IOOperations.getFileContent( at )
		
		# удаляем закомменченное
		strPure = PreProc.delCom( string )
		
		# Дробим на строки
		
		stringSplit = strPure.split('\n')
		for item in stringSplit:
			if cbFindCond( item ):
				f.write(item+'\n')
				newItem = item.split()[1]
				definedList.append( newItem )
	f.close()
	
	# сохраняем результаты поиска
	f = io.open( ofile+'.py', 'w', encoding='utf-8')
	f.write(u'#-*- coding: utf-8 -*-\n')
	f.write( ofile.split('/')[-1]+'List'+u' = [\n' )
	for at in definedList:
		f.write(u'\''+at+u'\','+u'\n')
	f.write(u']\n')
	f.close()
Example #3
0
def getMacroFile(listFiles):
    # контейнеры
    macDict = {}
    macContent = {}
    macArgsDict = {}
    for ifile in listFiles:
        # читаем
        string = IOOperations.getFileContent(ifile)
        commFree = delCom(string)

        # дробим на отдельные строки (по \n)
        #   и каждую анализируем отдельно
        listStr = commFree.split("\n")

        mustWrite = False  # начался ли макрос
        currentName = ""  # имя текущего макроса, в который пишем
        contentMacro = "'"
        for item in listStr:

            if "#v(i)" in item:
                item = item.replace("#v(i)", "'+i+'")

                # Проверка того, заполняем ли мы содержимое макроса
            if mustWrite and not "endm" in item:
                # удаляем увеличение переменной
                item = item.split(";")[0]  # .replace('\'', 'VvV')# '\\\'')
                # if '#v(i)' in item:
                # 	item = item.replace('#v(i)', '\'+i+\'')
                # сцепляем
                contentMacro += "\n" + item

                # если есть совпадение по macro - выделяем строку и анализируем
                #   еще не факт, что это то, что нужно
            if "macro" in item:
                # удаляем запятые
                item = item.replace(",", " ")

                # дробим
                listItemSplit = item.split()

                # Проверка на неслучайтость
                if "macro" in listItemSplit[1]:
                    # Сигнатрура макроса, теперь нужно найти его содержимое
                    currentName = listItemSplit[0]

                    # оставляем только параметры
                    itemListSplit = item.split(";")[0].split()
                    macArgsDict[currentName] = itemListSplit[2:]
                    mustWrite = True

                    # если макрос закончился
            if "endm" in item:
                listItemSplit = item.split()
                for at in listItemSplit:
                    if "endm" in at:
                        # с большой вер. это конец макроса
                        mustWrite = False

                        # проверка контента на важность

                        # добавление контента в словарь
                        macDict[currentName] = "\treturn " + contentMacro + "'"
                        contentMacro = "'"

                # Пишем в файл. Он собирается со всех.
    f = io.open("mFu.py", "w", encoding="utf-8")
    f.write(u"#-*- coding: utf-8 -*-\n")
    for at in macDict.keys():
        # нужно сделать параметры макроса переменными
        #   Gap! name_labelXX тоже заменит!! нужно подумать
        pins = ""
        i = 0
        for argi in macArgsDict[at]:
            macDict[at] = macDict[at].replace(argi, "'+" + argi + "+'")
            # распиновка
            pins += "\t" + argi + " = " + "args[" + str(i) + "]\n"
            i += 1
        pins += "\ti = " + " args[" + str(i) + "]\n"

        # Перенос строки
        macDict[at] = macDict[at].replace("\n", "\\n\\\n")
        macDict[at] = macDict[at].replace("i++", "")

        # Заголовок функции и распиновка
        macDict[at] = "def " + at.replace("?", "") + "( args ): " + "\n" + pins + macDict[at]

        # Смотрим что вышло
        f.write(macDict[at] + "\n")

        # Пишем формирователь словаря для доступа
    f.write(u"macDictFu = {\n")
    for it in macDict.keys():
        f.write("'" + it + "' : " + it.replace("?", "") + ",\n")
    f.write(u"}\nprint len(macDictFu)\n")
    f.close()
Example #4
0
	files = os.listdir( dir )

# И обрабатываем его
fileList = list()
for p in files :
	if p.find('.inc') != -1:
		fileList.append( dirForFound[0]+p )

import PreProc 
PreProc.getMacroFile( fileList )
import mFu

# Обрабатываем файл с кодом
ifile = '../src/_v1_IRQ.asm'
# читаем
string = IOOperations.getFileContent( ifile )
commFree = PreProc.delCom( string )
 
commFreeList = commFree.split('\n')

# замена в файлах
i = 0
f = io.open('mFu.asm', 'w', encoding='utf-8')
f.write(u'#-*- coding: utf-8 -*-\n')
for item in commFreeList:
	itemSplit = item.split()
	if len( itemSplit ) > 0:
		args = list('')
		if itemSplit[0] in mFu.macDictFu:	# поиск имени макроса
			# получаем аргументы
			args = PreProc.getArgs( item, i )