diff --git a/src/parser2.l b/src/parser2.l index 34d2ebc..d62d339 100644 --- a/src/parser2.l +++ b/src/parser2.l @@ -15,7 +15,7 @@ #define P2_BUFF_SIZE 0x4000 static FILE *p2_output; -static char *p2_text, *p2_buffer; +static char *p2_text, *p2_buffer, *p2_name, *p2_strtmp; static int p2_number, p2_lines, p2_level, p2_nested=0; int prompt_error2(int); @@ -30,8 +30,19 @@ int prompt_error2(int); %% +"#"file[ \t]*\"[a-z_][a-z0-9_]*"."[a-z_][a-z0-9_]*\"\n { + // Save original text + safe_strcat(p2_text, yytext, P2_TEXT_SIZE, p2_name, p2_lines); + // Save filename + p2_strtmp = strtok(yytext, "\""); + p2_strtmp = strtok(NULL, "\""); + // # file statements + p2_name[0] = '\0'; + safe_strcat(p2_name, p2_strtmp, PATH_MAX, p2_name, p2_lines); +} + "#"line[ \t]*[0-9]+\n { - safe_strcat(p2_text, yytext, P2_TEXT_SIZE, fname_src, -1); + safe_strcat(p2_text, yytext, P2_TEXT_SIZE, p2_name, p2_lines); p2_lines = atoi(&yytext[5]); BEGIN(line); } @@ -39,7 +50,7 @@ int prompt_error2(int); "."?rept[ \t]+ BEGIN(repnum); . { - safe_strcat(p2_text, yytext, P2_TEXT_SIZE, fname_src, -1); + safe_strcat(p2_text, yytext, P2_TEXT_SIZE, p2_name, p2_lines); BEGIN(INITIAL); } @@ -51,7 +62,7 @@ int prompt_error2(int); } "."?rept[ \t]+[0-9]+[ \t]* { - p2_buffer = safe_strcat(p2_buffer, yytext, P2_BUFF_SIZE, fname_src, -1); + p2_buffer = safe_strcat(p2_buffer, yytext, P2_BUFF_SIZE, p2_name, p2_lines); p2_nested++; p2_level++; } @@ -59,7 +70,7 @@ int prompt_error2(int); "#"line[ \t]*[0-9]+\n[ \t]*.?endr[ \t]*\n { if (p2_nested) { p2_nested--; - p2_buffer = safe_strcat(p2_buffer, yytext, P2_BUFF_SIZE, fname_src, -1); + p2_buffer = safe_strcat(p2_buffer, yytext, P2_BUFF_SIZE, p2_name, p2_lines); } else { int i; @@ -72,11 +83,11 @@ int prompt_error2(int); } } -. p2_buffer = safe_strcat(p2_text, yytext, P2_TEXT_SIZE, fname_src, -1); +. p2_buffer = safe_strcat(p2_text, yytext, P2_TEXT_SIZE, p2_name, p2_lines); -\n p2_buffer = safe_strcat(p2_buffer, yytext, P2_BUFF_SIZE, fname_src, -1); +\n p2_buffer = safe_strcat(p2_buffer, yytext, P2_BUFF_SIZE, p2_name, p2_lines); -<> error_message(2, fname_src, -1); +<> error_message(2, p2_name, p2_lines); . prompt_error2(1); @@ -85,12 +96,12 @@ int prompt_error2(int); p2_text[0] = 0; } -. safe_strcat(p2_text, yytext, P2_TEXT_SIZE, fname_src, -1); +. safe_strcat(p2_text, yytext, P2_TEXT_SIZE, p2_name, p2_lines); %% int prompt_error2(int c) { - fprintf(stderr, ", line %d: ", p2_lines); + fprintf(stderr, "%s, line %d: ", p2_name, p2_lines); switch (c) { case 1: fprintf(stderr, "number expected in REPT\n"); @@ -111,9 +122,11 @@ int preprocessor2() { int loop = 0; filename = malloc(PATH_MAX); + p2_name = malloc(PATH_MAX); p2_text = malloc(P2_TEXT_SIZE); p2_buffer = malloc(P2_BUFF_SIZE); - p2_text[0] = 0; + p2_text[0] = '\0'; + p2_name[0] = '\0'; printf("Expanding REPT\n"); do { diff --git a/src/parser4.l b/src/parser4.l index 124d683..cd11ec6 100644 --- a/src/parser4.l +++ b/src/parser4.l @@ -16,7 +16,7 @@ macro_type macro_list[MAX_MACROS]; static FILE *p4_output; -static char *p4_text, *p4_tmpstr; +static char *p4_text, *p4_tmpstr, *p4_name; static int p4_lines; int last_macro=0; @@ -35,8 +35,20 @@ void register_macro_parameters(); %% +"#"file[ \t]*\"[a-z_][a-z0-9_]*"."[a-z_][a-z0-9_]*\"\n { + // Save original text + safe_strcat(p4_text, yytext, P4_TEXT_SIZE, p4_name, p4_lines); + // Save filename + p4_tmpstr = strtok(yytext, "\""); + p4_tmpstr = strtok(NULL, "\""); + // # file statements + p4_name[0] = '\0'; + safe_strcat(p4_name, p4_tmpstr, PATH_MAX, p4_name, p4_lines); +} + + "#"line[ \t]*[0-9]+\n { - safe_strcat(p4_text, yytext, P4_TEXT_SIZE, fname_src, -1); + safe_strcat(p4_text, yytext, P4_TEXT_SIZE, p4_name, p4_lines); p4_lines = atoi(&yytext[5]); BEGIN(line); } @@ -186,11 +198,11 @@ void register_macro_parameters(); macro_src_tmp = macro_src; macro_src = add_lines_to_macro(macro_src); - safe_strcat(p4_text, macro_src, P4_TEXT_SIZE, fname_src, -1); + safe_strcat(p4_text, macro_src, P4_TEXT_SIZE, p4_name, p4_lines); // Free previous code free(macro_src); } else { - safe_strcat(p4_text, yytext, P4_TEXT_SIZE, fname_src, -1); + safe_strcat(p4_text, yytext, P4_TEXT_SIZE, p4_name, p4_lines); } free(yytext_copy); BEGIN(INITIAL); @@ -211,7 +223,7 @@ void register_macro_parameters(); .+\n { safe_strcat(macro_list[last_macro].code, yytext, MACRO_CODE_SIZE, - fname_src, p4_lines); + p4_name, p4_lines); } \n { @@ -221,7 +233,7 @@ void register_macro_parameters(); <> { - error_message(1, fname_src, p4_lines); + error_message(1, p4_name, p4_lines); } \n { @@ -229,7 +241,7 @@ void register_macro_parameters(); p4_text[0] = 0; } -. safe_strcat(p4_text, yytext, P4_TEXT_SIZE, fname_src, -1); +. safe_strcat(p4_text, yytext, P4_TEXT_SIZE, p4_name, p4_lines); %% @@ -288,7 +300,7 @@ void register_macro_parameters() { int prompt_error4(int c) { - fprintf(stderr, ", line %d: ", p4_lines); + fprintf(stderr, "%s, line %d: ", p4_name, p4_lines); switch (c) { case 1: fprintf(stderr, "MACRO without ENDM or ENDMACRO\n"); @@ -321,7 +333,9 @@ int preprocessor4() { printf("Expanding Macros\n"); p4_text = malloc(P4_TEXT_SIZE); - p4_text[0] = 0; + p4_text[0] = '\0'; + p4_name = malloc(PATH_MAX); + p4_name[0] = '\0'; if ((input = fopen(tmp0, "r")) == NULL) { fprintf(stderr, "Fatal: cannot process file %s", tmp0);