label_t *add_label (char *name, int value) { label_t *new_label; define_t *conflict_define; if (mode & MODE_CODE_COUNTER) { free(name); return NULL; } if (!case_sensitive) { char *new_name = strup (name); free (name); name = new_name; } if ((conflict_define = search_defines(name))) { show_error ("conflicting definition of '%s'", name); //if (suppress_errors == false) { show_error_prefix (conflict_define->input_file, conflict_define->line_num); WORD attr = save_console_attributes(); set_console_attributes (COLOR_RED); printf ("previous definition of '%s' was here\n", name); restore_console_attributes(attr); //} return NULL; } if ((new_label = search_labels (name))) { if (value != new_label->value) { new_label->value = value; show_warning ("redefinition of '%s'", name); show_warning_prefix (new_label->input_file, new_label->line_num); WORD attr = save_console_attributes(); set_console_attributes (COLOR_YELLOW); printf ("previous definition of '%s' was here\n", name); restore_console_attributes(attr); } } else { new_label = (label_t *)malloc (sizeof (label_t)); if (new_label != NULL) { new_label->name = name; new_label->line_num = line_num; new_label->input_file = strdup(curr_input_file); new_label->value = value; hash_insert (label_table, new_label); } } return new_label; }
void show_warning(const char *text, ...) { WORD attr = save_console_attributes(); va_list args; if (exit_code < EXIT_WARNINGS) exit_code = EXIT_WARNINGS; show_warning_prefix(curr_input_file, line_num); #ifdef WIN32 OutputDebugString(text); OutputDebugString(TEXT("\n")); #endif set_console_attributes (COLOR_YELLOW); va_start(args, text); vprintf (text, args); putchar ('\n'); restore_console_attributes(attr); }