do { LoadMacro(str); //создаёт подсписок macrobuf в котором содержатся команды макроса
fgets(str,40,file_r); //чтение след. команды макроса
f++; //счетчик команд в макросе
}
while (!strstr(str,"ENDM")); //пока не конец макроса
} }
if (feof(file_r)) { p3=p4=0; }
fclose(file_r); openf;
while (!feof(file_r)) //открытие для INCLUDE и IF
{ fgets(str,40,file_r);
if (strstr(str,"INCLUDE")) //проверка на содержание include-файла
{ fprintf(file_w,"%s\0",str);
FileReading(str); //копир. include-ф. в выходной file_w(.lst)
fgets(str,40,file_r); //след строка
}
if (strstr(str,"IF ")) //если есть условная директива
{ fprintf(file_w,str); //вывод строки с условной директивой
AnalisIF(str) ;//определение выполняется ли условная директива
ObrIF(); //если да, то чтение команд и запись их в выходной ф.
fgets(str,40,file_r);
} m1=m; //установка указателя на начало списка с макросами
int d=0; //еслт это 1-й эл списка макросов
if (l==0) {
fprintf(file_w,"\n"); l++; }
fprintf(file_w,"%s",str); // запись в .lst-файл
while (m1->next!=NULL) //перебор списка макросов
{ if (d>0) m1=m1->next;
if (strstr(str,m1->name) && !strstr(str,"MACRO") && !strstr(str,"ENDM"))
{ //если это место для вставки макрорасширения, а не определение макроса
SetParam(str); //запись фактич-их параметров макроса
p3++; p4=0; InsertBuf(); //вставка макрорасширения
break;
} d++; } }
m1=m; int er=0;
while (m1->next!=NULL) //освобожд памяти
{ if (er>0) m1=m1->next;
delete m1; er++; }
fclose(file_r); fclose(file_w); return 0;}
void MacroTab(char *str) //записывает в список имена макросов и создает подсписок с параметрами этоих макросов
int i=0,x=0,q=0,j=0; char buf[10];
clearbuf;
while (str[i]!='\n') //пока не конец строки
{ if (j>0) i++;
if (buf[0]==0 && str[i]==' ')
{ i++; continue; }
if (str[i]!=' ' && str[i]!='\n' && str[i]!=',')
{ buf[x++]=str[i]; //копир. строки до пробела в buf[]
j++; }
else {
if (strcmp(buf,"MACRO")==0) //если в buf[] записано MACRO
{ //то переходим к записи форм. параметров
clearbuf; j=x=0; }
else//иначе, если в buf[] имя макроса
{if (p==0) // если это 1-й макрос программы
{ // (или элемент в списке)
if (q==0) //если 1-й элем списка
{ m=new macroname; //созд. нового элем списка
strcpy(m->name,buf); //запись в список имени макроса
m->next=NULL; //конец списка
m1=m; //текущ эл
q++; }
//первый параметр в макросе
else {
if (p1==0) //если первый эл подсписка
{ m->mp=new macroname::macroparam;//новый эл подсписка
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.