summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES7
-rw-r--r--fluid/Fl_Function_Type.cxx7
-rw-r--r--fluid/Fl_Group_Type.cxx9
-rw-r--r--fluid/Fl_Menu_Type.cxx6
-rw-r--r--fluid/Fl_Type.h3
-rw-r--r--fluid/Fl_Widget_Type.cxx130
-rw-r--r--fluid/Fl_Window_Type.cxx26
-rw-r--r--fluid/Fluid_Image.cxx6
-rw-r--r--fluid/Fluid_Image.h2
-rw-r--r--fluid/code.cxx12
10 files changed, 117 insertions, 91 deletions
diff --git a/CHANGES b/CHANGES
index d65553c05..14d8201d3 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,8 +1,11 @@
CHANGES IN FLTK 1.1.8
+ - FLUID now only writes definitions of "o" and "w"
+ variables as needed, reducing the number of "variable
+ is shadowed" warnings from GCC.
- Added access to Xft font pointer (STR #1328)
- - Fixed endianness in OS X mouse cursor graphics
- (STR #1348)
+ - Fixed endianness in OS X mouse cursor graphics (STR
+ #1348)
- Fixed crash on mixed use of keyboard and mouse for
Fl_Menu_Button (STR #1356)
- Fixed Fl_Window::visible() and shown() for OS X
diff --git a/fluid/Fl_Function_Type.cxx b/fluid/Fl_Function_Type.cxx
index 1cf709dea..5167657e5 100644
--- a/fluid/Fl_Function_Type.cxx
+++ b/fluid/Fl_Function_Type.cxx
@@ -3,7 +3,7 @@
//
// C function type code for the Fast Light Tool Kit (FLTK).
//
-// Copyright 1998-2005 by Bill Spitzak and others.
+// Copyright 1998-2006 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
@@ -334,7 +334,7 @@ void Fl_Function_Type::write_code1() {
write_c("%s%s %s {\n", rtype, star, s);
}
}
- if (havewidgets) write_c(" %s* w;\n",subclassname(child));
+// if (havewidgets) write_c(" %s* w;\n",subclassname(child));
indentation += 2;
}
@@ -1082,9 +1082,8 @@ Fl_Class_Type Fl_Class_type;
static Fl_Class_Type *current_class;
extern Fl_Widget_Class_Type *current_widget_class;
-extern int varused_test;
void write_public(int state) {
- if ((!current_class && !current_widget_class) || varused_test) return;
+ if (!current_class && !current_widget_class) return;
if (current_class && current_class->write_public_state == state) return;
if (current_widget_class && current_widget_class->write_public_state == state) return;
if (current_class) current_class->write_public_state = state;
diff --git a/fluid/Fl_Group_Type.cxx b/fluid/Fl_Group_Type.cxx
index bb5834b0f..9dda8b5a3 100644
--- a/fluid/Fl_Group_Type.cxx
+++ b/fluid/Fl_Group_Type.cxx
@@ -7,7 +7,7 @@
// the Fl_Tabs widget, with special stuff to select tab items and
// insure that only one is visible.
//
-// Copyright 1998-2005 by Bill Spitzak and others.
+// Copyright 1998-2006 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
@@ -124,9 +124,12 @@ void Fl_Group_Type::write_code1() {
}
void Fl_Group_Type::write_code2() {
+ const char *var = name() ? name() : "o";
write_extra_code();
- write_c("%so->end();\n", indent());
- if (resizable()) write_c("%sFl_Group::current()->resizable(o);\n", indent());
+ write_c("%s%s->end();\n", indent(), var);
+ if (resizable()) {
+ write_c("%sFl_Group::current()->resizable(%s);\n", indent(), var);
+ }
write_block_close();
}
diff --git a/fluid/Fl_Menu_Type.cxx b/fluid/Fl_Menu_Type.cxx
index 1e493cc19..17d98f48e 100644
--- a/fluid/Fl_Menu_Type.cxx
+++ b/fluid/Fl_Menu_Type.cxx
@@ -9,7 +9,7 @@
// This file also contains code to make Fl_Menu_Button, Fl_Menu_Bar,
// etc widgets.
//
-// Copyright 1998-2005 by Bill Spitzak and others.
+// Copyright 1998-2006 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
@@ -373,7 +373,7 @@ void Fl_Menu_Item_Type::write_code1() {
init = 1;
write_c("%s{ Fl_Menu_Item* o = &%s[%d];\n", indent(), mname, i);
}
- image->write_code();
+ image->write_code("o");
}
for (int n=0; n < NUM_EXTRA_CODE; n++)
if (extra_code(n) && !isdeclare(extra_code(n))) {
@@ -462,7 +462,7 @@ Fl_Type* Fl_Menu_Type::click_test(int, int) {
void Fl_Menu_Type::write_code2() {
if (next && next->is_menu_item())
- write_c("%so->menu(%s);\n", indent(),
+ write_c("%s%s->menu(%s);\n", indent(), name() ? name() : "o",
unique_id(this, "menu", name(), label()));
Fl_Widget_Type::write_code2();
}
diff --git a/fluid/Fl_Type.h b/fluid/Fl_Type.h
index a6e9eebb5..7d12832b6 100644
--- a/fluid/Fl_Type.h
+++ b/fluid/Fl_Type.h
@@ -11,7 +11,8 @@
// instance of this object. It could also have a "copy()" function,
// but it was easier to implement this by using the file read/write
// that is needed to save the setup anyways.
-// Copyright 1998-2005 by Bill Spitzak and others.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
diff --git a/fluid/Fl_Widget_Type.cxx b/fluid/Fl_Widget_Type.cxx
index f4f99d2cf..1cc52a9ec 100644
--- a/fluid/Fl_Widget_Type.cxx
+++ b/fluid/Fl_Widget_Type.cxx
@@ -1941,8 +1941,6 @@ const char *Fl_Type::callback_name() {
return unique_id(this, "cb", name(), label());
}
-extern int varused_test, varused;
-
void Fl_Widget_Type::write_code1() {
const char* t = subclassname(this);
const char *c = array_name(this);
@@ -1960,17 +1958,23 @@ void Fl_Widget_Type::write_code1() {
write_h(" static void %s(%s*, %s);\n", cn, t, ut);
}
// figure out if local variable will be used (prevent compiler warnings):
- if (is_parent())
- varused = 1;
- else {
- varused_test = 1; varused = 0;
- write_widget_code();
- varused_test = 0;
+ int oused = !name();
+ int wused = !name() && is_window();
+ const char *ptr;
+
+ if (!oused) {
for (int n=0; n < NUM_EXTRA_CODE; n++)
- if (extra_code(n) && !isdeclare(extra_code(n))) varused = 1;
+ if (extra_code(n) && !isdeclare(extra_code(n)) &&
+ (ptr = strstr(extra_code(n), "o->")) != NULL &&
+ (ptr == extra_code(n) ||
+ (!isalnum(ptr[-1] & 255) && ptr[-1] != '_'))) {
+ oused = 1;
+ break;
+ }
}
+
write_c(indent());
- if (varused) write_c("{ %s* o = ", t);
+ if (oused) write_c("{ %s* o = ", t);
if (name()) write_c("%s = ", name());
if (is_window()) {
// Handle special case where user is faking a Fl_Group type as a window,
@@ -2002,10 +2006,12 @@ void Fl_Widget_Type::write_code1() {
}
}
write_c(");\n");
- indentation += 2;
- if (is_window()) write_c("%sw = o;\n",indent());
- if (varused) write_widget_code();
+ if (oused)
+ indentation += 2;
+
+ if (wused) write_c("%s%s* w = o;\n",indent(), subclassname(this));
+ write_widget_code();
}
void Fl_Widget_Type::write_color(const char* field, Fl_Color color) {
@@ -2038,18 +2044,21 @@ void Fl_Widget_Type::write_color(const char* field, Fl_Color color) {
case FL_DARK_CYAN: color_name = "FL_DARK_CYAN"; break;
case FL_WHITE: color_name = "FL_WHITE"; break;
}
+ const char *var = is_class() ? "this" : name() ? name() : "o";
if (color_name) {
- write_c("%so->%s(%s);\n", indent(), field, color_name);
+ write_c("%s%s->%s(%s);\n", indent(), var, field, color_name);
} else {
- write_c("%so->%s((Fl_Color)%d);\n", indent(), field, color);
+ write_c("%s%s->%s((Fl_Color)%d);\n", indent(), var, field, color);
}
}
// this is split from write_code1() for Fl_Window_Type:
void Fl_Widget_Type::write_widget_code() {
Fl_Widget* tplate = ((Fl_Widget_Type*)factory)->o;
+ const char *var = is_class() ? "this" : name() ? name() : "o";
+
if (tooltip() && *tooltip()) {
- write_c("%so->tooltip(",indent());
+ write_c("%s%s->tooltip(",indent(), var);
switch (i18n_type) {
case 0 : /* None */
write_cstring(tooltip());
@@ -2070,111 +2079,113 @@ void Fl_Widget_Type::write_widget_code() {
}
if (is_spinner() && ((Fl_Spinner*)o)->type() != ((Fl_Spinner*)tplate)->type())
- write_c("%so->type(%d);\n", indent(), ((Fl_Spinner*)o)->type());
+ write_c("%s%s->type(%d);\n", indent(), var, ((Fl_Spinner*)o)->type());
else if (o->type() != tplate->type() && !is_window())
- write_c("%so->type(%d);\n", indent(), o->type());
+ write_c("%s%s->type(%d);\n", indent(), var, o->type());
if (o->box() != tplate->box() || subclass())
- write_c("%so->box(FL_%s);\n", indent(), boxname(o->box()));
+ write_c("%s%s->box(FL_%s);\n", indent(), var, boxname(o->box()));
if (is_button()) {
Fl_Button* b = (Fl_Button*)o;
- if (b->down_box()) write_c("%so->down_box(FL_%s);\n", indent(),
+ if (b->down_box()) write_c("%s%s->down_box(FL_%s);\n", indent(), var,
boxname(b->down_box()));
- if (b->value()) write_c("%so->value(1);\n", indent());
+ if (b->value()) write_c("%s%s->value(1);\n", indent(), var);
if (b->shortcut())
- write_c("%so->shortcut(0x%x);\n", indent(), b->shortcut());
+ write_c("%s%s->shortcut(0x%x);\n", indent(), var, b->shortcut());
} else if (!strcmp(type_name(), "Fl_Input_Choice")) {
Fl_Input_Choice* b = (Fl_Input_Choice*)o;
- if (b->down_box()) write_c("%so->down_box(FL_%s);\n", indent(),
+ if (b->down_box()) write_c("%s%s->down_box(FL_%s);\n", indent(), var,
boxname(b->down_box()));
} else if (is_menu_button()) {
Fl_Menu_* b = (Fl_Menu_*)o;
- if (b->down_box()) write_c("%so->down_box(FL_%s);\n", indent(),
+ if (b->down_box()) write_c("%s%s->down_box(FL_%s);\n", indent(), var,
boxname(b->down_box()));
}
if (o->color() != tplate->color() || subclass())
write_color("color", o->color());
if (o->selection_color() != tplate->selection_color() || subclass())
write_color("selection_color", o->selection_color());
- if (image) image->write_code();
- if (inactive) inactive->write_code(1);
+ if (image) image->write_code(var);
+ if (inactive) inactive->write_code(var, 1);
if (o->labeltype() != tplate->labeltype() || subclass())
- write_c("%so->labeltype(FL_%s);\n", indent(),
+ write_c("%s%s->labeltype(FL_%s);\n", indent(), var,
item_name(labeltypemenu, o->labeltype()));
if (o->labelfont() != tplate->labelfont() || subclass())
- write_c("%so->labelfont(%d);\n", indent(), o->labelfont());
+ write_c("%s%s->labelfont(%d);\n", indent(), var, o->labelfont());
if (o->labelsize() != tplate->labelsize() || subclass())
- write_c("%so->labelsize(%d);\n", indent(), o->labelsize());
+ write_c("%s%s->labelsize(%d);\n", indent(), var, o->labelsize());
if (o->labelcolor() != tplate->labelcolor() || subclass())
write_color("labelcolor", o->labelcolor());
if (is_valuator()) {
Fl_Valuator* v = (Fl_Valuator*)o;
Fl_Valuator* f = (Fl_Valuator*)(tplate);
if (v->minimum()!=f->minimum())
- write_c("%so->minimum(%g);\n", indent(), v->minimum());
+ write_c("%s%s->minimum(%g);\n", indent(), var, v->minimum());
if (v->maximum()!=f->maximum())
- write_c("%so->maximum(%g);\n", indent(), v->maximum());
+ write_c("%s%s->maximum(%g);\n", indent(), var, v->maximum());
if (v->step()!=f->step())
- write_c("%so->step(%g);\n", indent(), v->step());
+ write_c("%s%s->step(%g);\n", indent(), var, v->step());
if (v->value()) {
if (is_valuator()==3) { // Fl_Scrollbar::value(double) is nott available
- write_c("%so->Fl_Slider::value(%g);\n", indent(), v->value());
+ write_c("%s%s->Fl_Slider::value(%g);\n", indent(), var, v->value());
} else {
- write_c("%so->value(%g);\n", indent(), v->value());
+ write_c("%s%s->value(%g);\n", indent(), var, v->value());
}
}
if (is_valuator()>=2) {
double x = ((Fl_Slider*)v)->slider_size();
double y = ((Fl_Slider*)f)->slider_size();
- if (x != y) write_c("%so->slider_size(%g);\n", indent(), x);
+ if (x != y) write_c("%s%s->slider_size(%g);\n", indent(), var, x);
}
}
if (is_spinner()) {
Fl_Spinner* v = (Fl_Spinner*)o;
Fl_Spinner* f = (Fl_Spinner*)(tplate);
if (v->minimum()!=f->minimum())
- write_c("%so->minimum(%g);\n", indent(), v->minimum());
+ write_c("%s%s->minimum(%g);\n", indent(), var, v->minimum());
if (v->maximum()!=f->maximum())
- write_c("%so->maximum(%g);\n", indent(), v->maximum());
+ write_c("%s%s->maximum(%g);\n", indent(), var, v->maximum());
if (v->step()!=f->step())
- write_c("%so->step(%g);\n", indent(), v->step());
+ write_c("%s%s->step(%g);\n", indent(), var, v->step());
if (v->value())
- write_c("%so->value(%g);\n", indent(), v->value());
+ write_c("%s%s->value(%g);\n", indent(), var, v->value());
}
{Fl_Font ff; int fs; Fl_Color fc; if (textstuff(4,ff,fs,fc)) {
Fl_Font f; int s; Fl_Color c; textstuff(0,f,s,c);
- if (f != ff) write_c("%so->textfont(%d);\n", indent(), f);
- if (s != fs) write_c("%so->textsize(%d);\n", indent(), s);
- if (c != fc) write_c("%so->textcolor(%d);\n",indent(), c);
+ if (f != ff) write_c("%s%s->textfont(%d);\n", indent(), var, f);
+ if (s != fs) write_c("%s%s->textsize(%d);\n", indent(), var, s);
+ if (c != fc) write_c("%s%s->textcolor(%d);\n",indent(), var, c);
}}
const char* ud = user_data();
if (class_name(1) && !parent->is_widget()) ud = "this";
if (callback()) {
- write_c("%so->callback((Fl_Callback*)%s", indent(), callback_name());
+ write_c("%s%s->callback((Fl_Callback*)%s", indent(), var, callback_name());
if (ud)
write_c(", (void*)(%s));\n", ud);
else
write_c(");\n");
} else if (ud) {
- write_c("%so->user_data((void*)(%s));\n", indent(), ud);
+ write_c("%s%s->user_data((void*)(%s));\n", indent(), var, ud);
}
if (o->align() != tplate->align() || subclass()) {
int i = o->align();
- write_c("%so->align(%s", indent(),
+ write_c("%s%s->align(%s", indent(), var,
item_name(alignmenu, i & ~FL_ALIGN_INSIDE));
if (i & FL_ALIGN_INSIDE) write_c("|FL_ALIGN_INSIDE");
write_c(");\n");
}
if (o->when() != tplate->when() || subclass())
- write_c("%so->when(%s);\n", indent(),item_name(whensymbolmenu, o->when()));
+ write_c("%s%s->when(%s);\n", indent(), var,
+ item_name(whensymbolmenu, o->when()));
if (!o->visible() && o->parent())
- write_c("%so->hide();\n", indent());
+ write_c("%s%s->hide();\n", indent(), var);
if (!o->active())
- write_c("%so->deactivate();\n", indent());
+ write_c("%s%s->deactivate();\n", indent(), var);
if (!is_group() && resizable())
- write_c("%sFl_Group::current()->resizable(o);\n",indent());
+ write_c("%sFl_Group::current()->resizable(%s);\n", indent(), var);
if (hotspot())
- write_c("%sw->hotspot(o);\n", indent());
+ write_c("%s%s->hotspot(o);\n", indent(),
+ is_class() ? "this" : name() ? name() : "w");
}
void Fl_Widget_Type::write_extra_code() {
@@ -2184,8 +2195,23 @@ void Fl_Widget_Type::write_extra_code() {
}
void Fl_Widget_Type::write_block_close() {
- indentation -= 2;
- if (is_parent() || varused) write_c("%s}\n", indent());
+ int oused = !name();
+ const char *ptr;
+
+ if (!oused) {
+ for (int n=0; n < NUM_EXTRA_CODE; n++)
+ if (extra_code(n) && !isdeclare(extra_code(n)) &&
+ (ptr = strstr(extra_code(n), "o->")) != NULL &&
+ (ptr == extra_code(n) ||
+ (!isalnum(ptr[-1] & 255) && ptr[-1] != '_'))) {
+ oused = 1;
+ break;
+ }
+ }
+ if (oused) {
+ indentation -= 2;
+ write_c("%s}\n", indent());
+ }
}
void Fl_Widget_Type::write_code2() {
diff --git a/fluid/Fl_Window_Type.cxx b/fluid/Fl_Window_Type.cxx
index 7e8e0000b..b9a7f8188 100644
--- a/fluid/Fl_Window_Type.cxx
+++ b/fluid/Fl_Window_Type.cxx
@@ -7,7 +7,7 @@
// for interacting with the overlay, which allows the user to
// select, move, and resize the children widgets.
//
-// Copyright 1998-2005 by Bill Spitzak and others.
+// Copyright 1998-2006 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
@@ -1279,23 +1279,27 @@ void Fl_Window_Type::write_code1() {
}
void Fl_Window_Type::write_code2() {
+ const char *var = is_class() ? "this" : name() ? name() : "o";
write_extra_code();
- if (modal) write_c("%so->set_modal();\n", indent());
- else if (non_modal) write_c("%so->set_non_modal();\n", indent());
- if (!((Fl_Window*)o)->border()) write_c("%so->clear_border();\n", indent());
+ if (modal) write_c("%s%s->set_modal();\n", indent(), var);
+ else if (non_modal) write_c("%s%s->set_non_modal();\n", indent(), var);
+ if (!((Fl_Window*)o)->border()) {
+ write_c("%s%s->clear_border();\n", indent(), var);
+ }
if (xclass) {
- write_c("%so->xclass(", indent());
+ write_c("%s%s->xclass(", indent(), var);
write_cstring(xclass);
write_c(");\n");
}
if (sr_max_w || sr_max_h) {
- write_c("%so->size_range(%d, %d, %d, %d);\n", indent(), sr_min_w, sr_min_h, sr_max_w, sr_max_h);
+ write_c("%s%s->size_range(%d, %d, %d, %d);\n", indent(), var,
+ sr_min_w, sr_min_h, sr_max_w, sr_max_h);
} else if (sr_min_w || sr_min_h) {
- write_c("%so->size_range(%d, %d);\n", indent(), sr_min_w, sr_min_h);
+ write_c("%s%s->size_range(%d, %d);\n", indent(), var, sr_min_w, sr_min_h);
}
- write_c("%so->end();\n", indent());
+ write_c("%s%s->end();\n", indent(), var);
if (((Fl_Window*)o)->resizable() == o)
- write_c("%so->resizable(o);\n", indent());
+ write_c("%s%s->resizable(o);\n", indent(), var);
write_block_close();
}
@@ -1435,7 +1439,7 @@ void Fl_Widget_Class_Type::write_code1() {
write_c("}\n\n");
write_c("void %s::_%s() {\n", name(), name());
- write_c(" %s *w = this;\n", name());
+// write_c(" %s *w = this;\n", name());
} else {
write_h("public:\n");
write_h(" %s(int X, int Y, int W, int H, const char *L = 0);\n", name());
@@ -1447,7 +1451,7 @@ void Fl_Widget_Class_Type::write_code1() {
write_c(" : %s(X, Y, W, H, L) {\n", c);
}
- write_c(" %s *o = this;\n", name());
+// write_c(" %s *o = this;\n", name());
write_widget_code();
}
diff --git a/fluid/Fluid_Image.cxx b/fluid/Fluid_Image.cxx
index fba6a9f9c..6bfc7ad8a 100644
--- a/fluid/Fluid_Image.cxx
+++ b/fluid/Fluid_Image.cxx
@@ -3,7 +3,7 @@
//
// Pixmap label support for the Fast Light Tool Kit (FLTK).
//
-// Copyright 1998-2005 by Bill Spitzak and others.
+// Copyright 1998-2006 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
@@ -118,9 +118,9 @@ void Fluid_Image::write_static() {
}
}
-void Fluid_Image::write_code(int inactive) {
+void Fluid_Image::write_code(const char *var, int inactive) {
if (!img) return;
- write_c("%so->%s(%s);\n", indent(), inactive ? "deimage" : "image",
+ write_c("%s%s->%s(%s);\n", indent(), var, inactive ? "deimage" : "image",
unique_id(this, "image", fl_filename_name(name()), 0));
}
diff --git a/fluid/Fluid_Image.h b/fluid/Fluid_Image.h
index 128c61ffe..0e62c28b7 100644
--- a/fluid/Fluid_Image.h
+++ b/fluid/Fluid_Image.h
@@ -50,7 +50,7 @@ public:
void image(Fl_Widget *); // set the image of this widget
void deimage(Fl_Widget *); // set the deimage of this widget
void write_static();
- void write_code(int inactive = 0);
+ void write_code(const char *var, int inactive = 0);
const char *name() const {return name_;}
};
diff --git a/fluid/code.cxx b/fluid/code.cxx
index 25f68fc45..597f77ef3 100644
--- a/fluid/code.cxx
+++ b/fluid/code.cxx
@@ -3,7 +3,7 @@
//
// Code output routines for the Fast Light Tool Kit (FLTK).
//
-// Copyright 1998-2005 by Bill Spitzak and others.
+// Copyright 1998-2006 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
@@ -153,15 +153,8 @@ int write_declare(const char *format, ...) {
////////////////////////////////////////////////////////////////
-// silly thing to prevent declaring unused variables:
-// When this symbol is on, all attempts to write code don't write
-// anything, but set a variable if it looks like the varaible "o" is used:
-int varused_test;
-int varused;
-
// write an array of C characters (adds a null):
void write_cstring(const char *w, int length) {
- if (varused_test) return;
const char *e = w+length;
int linelength = 1;
putc('\"', code_file);
@@ -228,7 +221,6 @@ void write_cstring(const char *w) {write_cstring(w,strlen(w));}
// write an array of C binary data (does not add a null):
void write_cdata(const char *s, int length) {
- if (varused_test) return;
const unsigned char *w = (const unsigned char *)s;
const unsigned char *e = w+length;
int linelength = 1;
@@ -246,7 +238,6 @@ void write_cdata(const char *s, int length) {
}
void write_c(const char* format,...) {
- if (varused_test) {varused = 1; return;}
va_list args;
va_start(args, format);
vfprintf(code_file, format, args);
@@ -254,7 +245,6 @@ void write_c(const char* format,...) {
}
void write_h(const char* format,...) {
- if (varused_test) return;
va_list args;
va_start(args, format);
vfprintf(header_file, format, args);