diff --git a/src/print.c b/src/print.c index ddd76a6..a36c369 100755 --- a/src/print.c +++ b/src/print.c @@ -370,14 +370,15 @@ print_state (FILE *out, state *s) | Print information on the whole grammar. | `-----------------------------------------*/ -#define END_TEST(End) \ +#define WRAP_PUT(Str) \ do { \ - if (column + strlen(buffer) > (End)) \ + if (column > 65) \ { \ - fprintf (out, "%s\n ", buffer); \ + fputs ("\n ", out); \ column = 3; \ - buffer[0] = 0; \ } \ + fputs ((Str), out); \ + column += strlen(Str); \ } while (0) @@ -386,7 +387,7 @@ print_grammar (FILE *out) { symbol_number i; char buffer[90]; - int column = 0; + int column; grammar_rules_print (out); @@ -399,21 +400,20 @@ print_grammar (FILE *out) rule_number r; item_number *rhsp; - buffer[0] = 0; - column = strlen (tag); - fputs (tag, out); - END_TEST (65); + column = 0; + WRAP_PUT (tag); sprintf (buffer, " (%d)", i); + WRAP_PUT (buffer); for (r = 0; r < nrules; r++) for (rhsp = rules[r].rhs; *rhsp >= 0; rhsp++) if (item_number_as_symbol_number (*rhsp) == token_translations[i]) { - END_TEST (65); - sprintf (buffer + strlen (buffer), " %d", r); + sprintf (buffer, " %d", r); + WRAP_PUT (buffer); break; } - fprintf (out, "%s\n", buffer); + fputc ('\n', out); } fputs ("\n\n", out); @@ -438,23 +438,19 @@ print_grammar (FILE *out) } } - buffer[0] = 0; - fputs (tag, out); - column = strlen (tag); - sprintf (buffer, " (%d)", i); - END_TEST (0); + fprintf (out, "%s (%d)\n ", tag, i); + column = 3; if (left_count > 0) { - END_TEST (65); - sprintf (buffer + strlen (buffer), _(" on left:")); + WRAP_PUT (_(" on left:")); for (r = 0; r < nrules; r++) { if (rules[r].lhs->number == i) { - END_TEST (65); - sprintf (buffer + strlen (buffer), " %d", r); + sprintf (buffer, " %d", r); + WRAP_PUT (buffer); } } } @@ -462,22 +458,24 @@ print_grammar (FILE *out) if (right_count > 0) { if (left_count > 0) - sprintf (buffer + strlen (buffer), ","); - END_TEST (65); - sprintf (buffer + strlen (buffer), _(" on right:")); + { + fputc (',', out); + column++; + } + WRAP_PUT (_(" on right:")); for (r = 0; r < nrules; r++) { item_number *rhsp; for (rhsp = rules[r].rhs; *rhsp >= 0; rhsp++) if (item_number_as_symbol_number (*rhsp) == i) { - END_TEST (65); - sprintf (buffer + strlen (buffer), " %d", r); + sprintf (buffer, " %d", r); + WRAP_PUT (buffer); break; } } } - fprintf (out, "%s\n", buffer); + fputc ('\n', out); } }