gfio: add graph axis unit change notification callbacks

This enables code that uses the graph functions to change the axis
titles on the fly to display unit information which matches how the
tick labels are shortened.

Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
diff --git a/graph.c b/graph.c
index 1194510..de65055 100644
--- a/graph.c
+++ b/graph.c
@@ -59,6 +59,8 @@
 	struct graph_label *tail;
 	int per_label_limit;
 	const char *font;
+	graph_axis_unit_change_callback x_axis_unit_change_callback;
+	graph_axis_unit_change_callback y_axis_unit_change_callback;
 };
 
 void graph_set_size(struct graph *g, unsigned int xdim, unsigned int ydim)
@@ -80,6 +82,16 @@
 	return g;
 }
 
+void graph_x_axis_unit_change_notify(struct graph *g, graph_axis_unit_change_callback f)
+{
+	g->x_axis_unit_change_callback = f;
+}
+
+void graph_y_axis_unit_change_notify(struct graph *g, graph_axis_unit_change_callback f)
+{
+	g->y_axis_unit_change_callback = f;
+}
+
 static int count_labels(struct graph_label *labels)
 {
 	int count = 0;
@@ -303,10 +315,13 @@
 {
 	struct tickmark *tm;
 	double tx;
-	int i;
+	int i, power_of_ten;
 	static double dash[] = { 1.0, 2.0 };
 
-	nticks = calc_tickmarks(minx, maxx, nticks, &tm);
+	nticks = calc_tickmarks(minx, maxx, nticks, &tm, &power_of_ten,
+		g->x_axis_unit_change_callback == NULL);
+	if (g->x_axis_unit_change_callback)
+		g->x_axis_unit_change_callback(g, power_of_ten);
 
 	for (i = 0; i < nticks; i++) {
 		tx = (((tm[i].value) - minx) / (maxx - minx)) * (x2 - x1) + x1;
@@ -341,10 +356,13 @@
 {
 	struct tickmark *tm;
 	double ty;
-	int i;
+	int i, power_of_ten;
 	static double dash[] = { 2.0, 2.0 };
 
-	nticks = calc_tickmarks(miny, maxy, nticks, &tm);
+	nticks = calc_tickmarks(miny, maxy, nticks, &tm, &power_of_ten,
+		g->y_axis_unit_change_callback == NULL);
+	if (g->y_axis_unit_change_callback)
+		g->y_axis_unit_change_callback(g, power_of_ten);
 
 	for (i = 0; i < nticks; i++) {
 		ty = y2 - (((tm[i].value) - miny) / (maxy - miny)) * (y2 - y1);