- if (0 == strcmp (at_directive_name, "@basename"))
- {
- if (at_directive_argc > 1)
- fail_for_at_directive_too_many_args ();
- fputs (last_component (at_directive_argv[0]), yyout);
- }
- else if (0 == strcmp (at_directive_name, "@warn")
- || 0 == strcmp (at_directive_name, "@complain")
- || 0 == strcmp (at_directive_name, "@fatal"))
- {
- void (*func)(char const *, ...);
- switch (at_directive_name[1])
- {
- case 'w': func = warn; break;
- case 'c': func = complain; break;
- case 'f': func = fatal; break;
- default: aver (false); func = NULL; break;
- }
- switch (at_directive_argc)
- {
- case 1:
- func (_(at_directive_argv[0]));
- break;
- case 2:
- func (_(at_directive_argv[0]), at_directive_argv[1]);
- break;
- case 3:
- func (_(at_directive_argv[0]), at_directive_argv[1],
- at_directive_argv[2]);
- break;
- case 4:
- func (_(at_directive_argv[0]), at_directive_argv[1],
- at_directive_argv[2], at_directive_argv[3]);
- break;
- case 5:
- func (_(at_directive_argv[0]), at_directive_argv[1],
- at_directive_argv[2], at_directive_argv[3],
- at_directive_argv[4]);
- break;
- default:
- fail_for_at_directive_too_many_args ();
- break;
- }
- }
- else if (0 == strcmp (at_directive_name, "@output"))
- {
- if (at_directive_argc > 1)
- fail_for_at_directive_too_many_args ();
- if (outname)
- {
- free (outname);
- xfclose (yyout);
- }
- outname = xstrdup (at_directive_argv[0]);
- output_file_name_check (outname);
- yyout = xfopen (outname, "w");
- lineno = 1;
- }
- else
- fail_for_invalid_at (at_directive_name);
-
- obstack_free (&obstack_for_string, at_directive_argv[0]);
- at_directive_argc = 0;
- free (at_directive_name);