+/*
+ * GOB C Preprocessor
+ * Copyright (C) 1999,2000 the Free Software Foundation.
+ * Copyright (C) 2000 Eazel, Inc.
+ * Copyright (C) 2001-2011 George (Jiri) Lebl
+ *
+ * Author: George (Jiri) Lebl
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ * USA.
+ */
+
+#include <config.h>
#include <stdio.h>
#include <stdarg.h>
#include <glib.h>
-#include "out.h"
-
-extern FILE *out;
-extern FILE *outh;
-extern FILE *outph;
+#include "main.h"
-extern gboolean for_cpp;
-
-extern char *filename;
-extern char *filebase;
+#include "out.h"
int outline = 1;
+static gboolean in_out = TRUE;
int outhline = 1;
+static gboolean in_outh = TRUE;
int outphline = 1;
+static gboolean in_outph = TRUE;
+
+extern char file_sep;
static int
strchrcnt(char *s, char c)
}
void
-out_printf(FILE *fp,char *format,...)
+out_printf(FILE *fp, const char *format,...)
{
va_list ap;
char *s;
- va_start(ap,format);
- s = g_strdup_vprintf(format,ap);
+ if (no_write)
+ return;
+
+ va_start(ap, format);
+ s = g_strdup_vprintf(format, ap);
va_end(ap);
if(fp == out)
- outline += strchrcnt(s,'\n');
+ outline += strchrcnt(s, '\n');
else if(fp == outh)
- outhline += strchrcnt(s,'\n');
+ outhline += strchrcnt(s, '\n');
else if(fp == outph)
- outphline += strchrcnt(s,'\n');
+ outphline += strchrcnt(s, '\n');
else
g_assert_not_reached();
- fprintf(fp,"%s",s);
+ fprintf(fp, "%s", s);
g_free(s);
}
void
out_addline_infile(FILE *fp, int line)
{
- if(fp == out)
+ if(no_lines || no_write)
+ return;
+
+ if(fp == out) {
outline++;
- else if(fp == outh)
+ in_out = FALSE;
+ } else if(fp == outh) {
outhline++;
- else if(fp == outph)
+ in_outh = FALSE;
+ } else if(fp == outph) {
outphline++;
- else
+ in_outph = FALSE;
+ } else
g_assert_not_reached();
- fprintf(fp,"#line %d \"%s\"\n",line,filename);
+ fprintf(fp, "#line %d \"%s\"\n", line, filename);
}
void
out_addline_outfile(FILE *fp)
{
+ if(no_lines || no_write)
+ return;
+
if(fp == out) {
+ if(in_out) return;
outline++;
if(!for_cpp)
fprintf(fp,"#line %d \"%s.c\"\n",outline,filebase);
else
fprintf(fp,"#line %d \"%s.cc\"\n",outline,filebase);
+ in_out = TRUE;
} else if(fp == outh) {
+ if(in_outh) return;
outhline++;
fprintf(fp,"#line %d \"%s.h\"\n",outhline,filebase);
+ in_outh = TRUE;
} else if(fp == outph) {
+ char sep[2] = {0,0};
+ if(in_outph) return;
outphline++;
- fprintf(fp,"#line %d \"%s-private.h\"\n",outphline,filebase);
+ if (file_sep != 0)
+ sep[0] = file_sep;
+ fprintf(fp,"#line %d \"%s%sprivate.h\"\n",outphline,filebase,sep);
+ in_outph = TRUE;
} else
g_assert_not_reached();
-
}