#include<stdio.h>
#include<conio.h>
void main() {
char words[25][25];
char str[25], ch;
int i, j, w = 0, m = 0, flag = 0;
char macro[10][25];
char val[10][25];
long l;
FILE * fp, * fp1;
fp = fopen("text.c", "r");
fp1 = fopen("temp.c", "w");
clrscr();
printf("\n File: text.c before MACRO EXPANSION\n\n");
if (fp != NULL) {
do {
j = 0;
ch = 'd';
strcpy(str, "");
while (ch != ' ') {
ch = getc(fp);
printf("%c", ch);
if (ch == EOF) break;
putc(ch, fp1);
str[j] = ch;
if (ch != ' ' && ch != '\n' && ch != ';' && ch != '=' && ch != '+')
j++;
if (ch == ' ' || ch == '\n') break;
if (ch == ';' || ch == '=' || ch == '+') break;
}
str[j] = '\0';
strcpy(words[w++], str);
j = 0;
} while (ch != EOF);
}
for (i = 0; i < w; i++) {
if (!strcmp(words[i], "#define")) {
strcpy(macro[m++], words[++i]);
}
}
for (i = 0; i < w; i++) {
if (!strcmp(words[i], "main()"))
break;
for (j = 0; j < m; j++) {
if (!strcmp(words[i], macro[j])) {
strcpy(val[j], words[++i]);
}
}
}
fclose(fp);
fclose(fp1);
fp = fopen("text.c", "w");
fp1 = fopen("temp.c", "r");
if (fp1 != NULL) {
do {
j = 0;
ch = 'd';
strcpy(str, "");
while (ch != ' ') {
ch = getc(fp1);
if (ch == EOF) break;
putc(ch, fp);
str[j] = ch;
if (ch != ' ' && ch != '\n' && ch != ';' && ch != '=' && ch != '+')
j++;
if (ch == ' ' || ch == '\n') break;
if (ch == ';' || ch == '=' || ch == '+') break;
}
str[j] = '\0';
if (flag) {
for (i = 0; i < m; i++) {
if (!strcmp(str, macro[i])) {
l = strlen(str);
fseek(fp, -(1 * l + 1), SEEK_CUR);
fputs(val[i], fp);
} //if
} //for
} //if-flag
if (ch == ';')
putc(ch, fp);
if (!strcmp(str, "main()"))
flag = 1;
j = 0;
} while (ch != EOF);
}
fclose(fp);
fclose(fp1);
fp = fopen("text.c", "r");
printf("\n\n\n File: text.c after MACRO EXPANSION\n\n");
if (fp != NULL) {
do {
ch = getc(fp);
printf("%c", ch);
} while (ch != EOF);
}
fclose(fp);
getch();
}