- else if (STREQ (argv[0], "@complain"))
- {
- static unsigned indent;
- if (argc < 4)
- fail_for_at_directive_too_few_args (argv[0]);
- warnings w = flag (argv[1]);
- if ((w & silent) != silent)
- indent = 0;
- location loc;
- location *locp = NULL;
- if (argv[2] && argv[2][0])
- {
- boundary_set_from_string (&loc.start, argv[2]);
- boundary_set_from_string (&loc.end, argv[3]);
- locp = &loc;
- }
- if (w & silent)
- indent += SUB_INDENT;
- complain_args (locp, w, &indent, argc - 3, argv + 3);
- if (w & silent)
- indent -= SUB_INDENT;
- }
- else if (STREQ (argv[0], "@output"))
+ if (w & silent)
+ indent += SUB_INDENT;
+ else
+ indent = 0;
+ complain_args (locp, w, &indent, argc - 4, argv + 4);
+ if (w & silent)
+ indent -= SUB_INDENT;
+}
+
+static void
+at_output (int argc, char *argv[], char **out_namep, int *out_linenop)
+{
+ if (2 < argc)
+ fail_for_at_directive_too_many_args (argv[0]);
+ if (*out_namep)