#ifndef EMACS
#include "config.h"
#include "system.h"
#else
#include <stdio.h>
#endif
#include "cpplib.h"
#include "intl.h"
void
cpp_print_containing_files (pfile)
cpp_reader *pfile;
{
cpp_buffer *ip;
int first = 1;
if (pfile->input_stack_listing_current)
return;
ip = cpp_file_buffer (pfile);
if (ip == NULL)
return;
while ((ip = CPP_PREV_BUFFER (ip)), ip != CPP_NULL_BUFFER (pfile))
{
long line, col;
cpp_buf_line_and_col (ip, &line, &col);
if (ip->fname != NULL)
{
if (first)
{
first = 0;
cpp_notice ("In file included from %s:%ld",
ip->nominal_fname, line);
}
else
cpp_message (pfile, -1, ",\n from %s:%ld",
ip->nominal_fname, line);
}
}
if (! first)
fputs (":\n", stderr);
pfile->input_stack_listing_current = 1;
}
void
cpp_file_line_for_message (pfile, filename, line, column)
cpp_reader *pfile ATTRIBUTE_UNUSED;
char *filename;
int line, column;
{
if (column > 0)
fprintf (stderr, "%s:%d:%d: ", filename, line, column);
else
fprintf (stderr, "%s:%d: ", filename, line);
}
void
v_cpp_message (pfile, is_error, msgid, ap)
cpp_reader * pfile;
int is_error;
const char *msgid;
va_list ap;
{
switch (is_error)
{
case -1:
break;
case 0:
fprintf (stderr, _("warning: "));
break;
case 1:
if (pfile->errors < CPP_FATAL_LIMIT)
pfile->errors++;
break;
case 2:
pfile->errors = CPP_FATAL_LIMIT;
break;
default:
cpp_fatal (pfile, "internal error: bad is_error(%d) in v_cpp_message", is_error);
}
vfprintf (stderr, _(msgid), ap);
if (0 <= is_error)
fprintf (stderr, "\n");
}
void
cpp_message VPROTO ((cpp_reader *pfile, int is_error, const char *msgid, ...))
{
#ifndef ANSI_PROTOTYPES
cpp_reader *pfile;
int is_error;
const char *msgid;
#endif
va_list ap;
VA_START (ap, msgid);
#ifndef ANSI_PROTOTYPES
pfile = va_arg (ap, cpp_reader *);
is_error = va_arg (ap, int);
msgid = va_arg (ap, const char *);
#endif
v_cpp_message(pfile, is_error, msgid, ap);
va_end(ap);
}
void
cpp_fatal VPROTO ((cpp_reader *pfile, const char *msgid, ...))
{
#ifndef ANSI_PROTOTYPES
cpp_reader *pfile;
const char *msgid;
#endif
va_list ap;
VA_START (ap, msgid);
#ifndef ANSI_PROTOTYPES
pfile = va_arg (ap, cpp_reader *);
msgid = va_arg (ap, const char *);
#endif
fprintf (stderr, "%s: ", progname);
v_cpp_message (pfile, 2, msgid, ap);
va_end(ap);
}
void
cpp_pfatal_with_name (pfile, name)
cpp_reader *pfile;
const char *name;
{
cpp_perror_with_name (pfile, name);
#ifdef VMS
exit (vaxc$errno);
#else
exit (FATAL_EXIT_CODE);
#endif
}
void
cpp_notice VPROTO ((const char *msgid, ...))
{
#ifndef ANSI_PROTOTYPES
const char *msgid;
#endif
va_list ap;
VA_START (ap, msgid);
#ifndef ANSI_PROTOTYPES
msgid = va_arg (ap, const char *);
#endif
fprintf (stderr, "%s: ", progname);
v_cpp_message ((cpp_reader *) 0, -1, msgid, ap);
va_end(ap);
}