- char *out_start = xnmalloc (strlen (in)+1, sizeof *out_start);
- char *out;
- for (out = out_start; *in != '\0'; ++in, ++out)
+ /* compare with values issued from b4_error */
+ if (STREQ (arg, "warn"))
+ return Wother;
+ else if (STREQ (arg, "complain"))
+ return complaint;
+ else if (STREQ (arg, "fatal"))
+ return fatal;
+ else
+ aver (false);
+}
+
+static void
+at_directive_perform (int argc, char *argv[], char **outnamep, int *out_linenop)
+{
+ if (STREQ (argv[0], "@basename"))
+ {
+ if (argc > 2)
+ fail_for_at_directive_too_many_args (argv[0]);
+ fputs (last_component (argv[1]), yyout);
+ }
+ else if (STREQ (argv[0], "@complain"))
+ {
+ if (argc < 4)
+ fail_for_at_directive_too_few_args (argv[0]);
+ warnings w = flag (argv[1]);
+ 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;
+ }
+ complain_args (locp, w, argc - 3, argv + 3);
+ }
+ else if (STREQ (argv[0], "@output"))