if (DIR_MACRO==(opcode=findstr(macrodir,lexbuf)))
{
macrotab[idx].param_count=0;
macrotab[idx].str_count=0;
while (!strconsist("\n",parsep[0]))
{
parsep=parse(lexbuf,parsep);
if (lexbuf[0]!=',')
{
strcpy(macrotab[idx].param[macrotab[idx].param_count].name,lexbuf);
macrotab[idx].param_count++;
}
}
fprintf(F1,"1\t%10i%39s",number,cmdbuf);
parsep=parse(macrotab[idx].name,cmdbuf);
goto read;
}
fprintf(F1,"1\t%10i%35s",number,cmdbuf);
parsep=parse(lexbuf,cmdbuf);
if (OP_ENDM!=(findstr(macrodir,lexbuf)))
{
strcpy(macrotab[idx].param[macrotab[idx].str_count].buf,cmdbuf);
macrotab[idx].str_count++;
} else
{
idx++;
cmdbuf[0]=0;
goto read;
}
}
fprintf(F1,"\n");
}
/* Поиск имени макроопределения */
int find_macro (char buf[MAXSTR])
{
int index;
for (index=0; index <= idx; index++)
if (strcomp (buf,macrotab[index].name))
return index;
return -1;
}
int find_parametr(char buf[MAXSTR])
{
int index;
for (index=0; index <macrotab[cmdidx].param_count ; index++)
if (strcomp (buf,macrotab[cmdidx].param[index].name))
return index;
return -1;
}
int find_sym (char buf[MAXSTR])
{
int index;
for (index = 0;index < j; index++)
if (strcomp (buf,symtab[index].mnem))
return index;
return -1;
}
void main(void)
{
clrscr();
int op1num, op2num, i=0,index=0,k=0;
int source_number=0;
int flag=0;
char codop1;
char *mybuf;
int Seg_Begin,Seg_End;
int seg_open_flag=0;
F=fopen("text2.asm","r");
if (F==NULL)
{
printf("\nFile not found");
exit(0);
}
F1=fopen("text2.lst","w");
F3=fopen("$text2.asm","w");
begin:
while (!feof(F))
{
fgets(cmdbuf,MAXSTR,F);
number++;
source_number++;
strupcase(cmdbuf);
if(strconsist("\n",cmdbuf[0]))
goto begin;
parsep = cmdbuf;
do{
restart:
parsep=parse(lexbuf,parsep);
/* Обработка директивы include */
if (0==(opcode=findstr(prepr_dir,lexbuf)))
{
parsep=parse(lexbuf,parsep);
if (NULL==(F2=fopen(lexbuf,"r")))
{
printf("\n:unable to not open %s",lexbuf);
exit(0);
}
fprintf (F1,"\t%10i%39s",source_number,cmdbuf);
macro_def();
goto begin;
} /* Конец обработки */
if (opcode==1)
{
parsep=parse(lexbuf,parsep);
if (strtoi(lexbuf,&n))
{
printf("\nLine%d",number);
printf(":Bad number");
exit(0);
}else
{
mybuf="";
do
{
fgets(cmdbuf,MAXSTR,F);
strupcase(cmdbuf);
parsep = cmdbuf;
parsep=parse(lexbuf,parsep);
if(OP_ENDM!=(opcode=findstr(macrodir,lexbuf)))
strcat(mybuf,cmdbuf);
}
while(OP_ENDM!=(opcode=findstr(macrodir,lexbuf)));
for(int rep=0;rep<n;rep++)
fputs(mybuf,F3);
goto begin;
}
}
//────────────────────────────────────────────────────────────────────────────
//
if (OP_IFNB==(opcode=findstr(mnemonics,lexbuf)))
{
if (!seg_open_flag)
{
printf("\nline %d:Not open segment",number);
exit(0);
}
fprintf(F1,"\t%10i \t%-s",number,cmdbuf);
parsep=parse(lexbuf,parsep);
int my_flag=0;
if (lexbuf[0]!='<')
{
printf("line %i:Must be '<'",source_number);
exit(0);
}
/* Проверка на наличие аргумента */
parsep=parse(lexbuf,parsep);
if (lexbuf[0]!='>')
if (parsetyp==PT_WORD)
{
my_flag=1;
goto my_label;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.