+static void draw_axis(struct drawing_context* cxt, struct graph_axis *axis, double scaling, double offset, double max) {
+ #ifdef DEBUG_DRAW_AXIS
+ fprintf(stderr, "draw_axis; major_start=%g, major_step=%g, >major=%d, minor=%d, subminor=%d, label=%s\n", axis->major_start, axis->major_step, axis->major, axis->minor, axis->subminor, axis->title->str);
+ #endif
+ cairo_move_to(cxt->cr, 0, 0);
+ cairo_line_to(cxt->cr, max, 0);
+ register int i, j, k;
+ register double pos, mpos, smpos;
+ for(i=0; i<axis->major; i++) {
+ pos=i*axis->major_step + axis->major_start;
+ cairo_move_to(cxt->cr, (pos + offset)*scaling, 0);
+ cairo_line_to(cxt->cr, (pos + offset)*scaling, 0.05);
+ for(k=0; k<axis->subminor; k++) {
+ smpos=(k+1)*(axis->major_step/(axis->minor+1)/(axis->subminor+1)) + pos;
+ cairo_move_to(cxt->cr, (smpos + offset)*scaling, 0);
+ cairo_line_to(cxt->cr, (smpos + offset)*scaling, 0.0125);
+ }
+ for(j=0; j<axis->minor; j++) {
+ mpos=(j+1)*(axis->major_step/(axis->minor+1)) + pos;
+ cairo_move_to(cxt->cr, (mpos + offset)*scaling, 0);
+ cairo_line_to(cxt->cr, (mpos + offset)*scaling, 0.025);
+ for(k=0; k<axis->subminor; k++) {
+ smpos=(k+1)*(axis->major_step/(axis->minor+1)/(axis->subminor+1)) + mpos;
+ cairo_move_to(cxt->cr, (smpos + offset)*scaling, 0);
+ cairo_line_to(cxt->cr, (smpos + offset)*scaling, 0.0125);
+ }
+ }
+ }
+ pos=i*axis->major_step + axis->major_start;
+ cairo_move_to(cxt->cr, (pos + offset)*scaling, 0);
+ cairo_line_to(cxt->cr, (pos + offset)*scaling, 0.05);
+}
+