You are on page 1of 5

MACRO

PROGRAM:
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
FILE *fp,*fp1,*fp2,*fp3;
char opcode[50]=" ",name[20];
char macroname[50]=" ",def[20];
char ch;
clrscr();
fp=fopen("source.dat","r");
fp1=fopen("define.dat","w");
fp2=fopen("name.dat","w");
fp3=fopen("out.dat","w");
clrscr();
while(!feof(fp))
{
strcpy(name,opcode);
fscanf(fp,"%s",opcode);
printf("%s",opcode);
if(strcmp(opcode,"MACRO")==0)
{
fprintf(fp2,"%s\n",name);
fprintf(fp1,"%s\n",name);
while(strcmp(opcode,"MEND")!=0)
{
fprintf(fp1,"%s\n",opcode);
fscanf(fp,"%s",opcode);
}
fprintf(fp1,"MEND\n");
}
}
fclose(fp);
fclose(fp1);
fclose(fp2);
fp=fopen("SOURCE.DAT","r");
while(!feof(fp))
{
fscanf(fp,"%s",opcode);
fp2=fopen("name.dat","r");
while(!feof(fp2))
{
fscanf(fp2,"%s",macroname);

if(strcmp(opcode,macroname)==0)
{
fscanf(fp,"%s",opcode);
if(strcmp(opcode,"MACRO")==0)
{
while(strcmp(opcode,"MEND")!=0)
{
fscanf(fp,"%s",opcode);
}
fscanf(fp,"%s",opcode);
}
else
{
fp1=fopen("define.dat","r");
while(!feof(fp1))
{
fscanf(fp1,"%s",def);
if(strcmp(def,macroname)==0)
{
fscanf(fp1,"%s",def);
fscanf(fp1,"%s",def);
while(strcmp(def,"MEND")!=0)
{
fprintf(fp3,"%s\n",def);
fscanf(fp1,"%s",def);
}
}
}
fclose(fp1);
}
}
}
fclose(fp2);
fprintf(fp3,"%s\n",opcode);
}
clrscr();
fclose(fp3);
fp3=fopen("out.dat","r");
while((ch=getc(fp3))!=EOF)
{
printf("%c",ch);
}
getch();
}

INPUT:
SOURCE.DAT
ADDA MACRO
CLEAR A
ADD 05
MEND
SUBA MACRO
CLEAR A
SUB 05
MEND
COPY START 0
CLEAR X
ADDA
SUBA
END

OUTPUT:
COPY
START
0
CLEAR
X
CLEAR
A
ADD
05
CLEAR
A
SUB
05
END

DEFINE.DAT
ADDA
MACRO
CLEAR
A
ADD
05
MEND
SUBA
MACRO
CLEAR
A
SUB
05
MEND
NAME.DAT
ADDA
SUBA

OUT.DAT
COPY
START
0
CLEAR
X
CLEAR
A
ADD
05
CLEAR
A
SUB
05
END

You might also like