void output_draw(struct lstopo_output *loutput) { hwloc_topology_t topology = loutput->topology; struct draw_methods *methods = loutput->methods; int logical = loutput->logical; int legend = loutput->legend; unsigned gridsize = loutput->gridsize; unsigned fontsize = loutput->fontsize; unsigned depth = 100; unsigned totwidth, totheight, offset, i; time_t t; char text[128]; char hostname[128] = ""; unsigned long hostname_size = sizeof(hostname); output_compute_pu_min_textwidth(loutput); system_draw(loutput, methods, hwloc_get_root_obj(topology), depth, 0, &totwidth, 0, &totheight); if (totwidth < 20*fontsize) totwidth = 20*fontsize; if (legend) { /* Display the hostname, but only if we're showing *this* system */ if (hwloc_topology_is_thissystem(topology)) { #if defined(HWLOC_WIN_SYS) && !defined(__CYGWIN__) GetComputerName(hostname, &hostname_size); #else gethostname(hostname, hostname_size); #endif } if (*hostname) { snprintf(text, sizeof(text), "Host: %s", hostname); methods->box(loutput, 0xff, 0xff, 0xff, depth, 0, totwidth, totheight, gridsize + (gridsize + fontsize)*(3+loutput->legend_append_nr)); methods->text(loutput, 0, 0, 0, fontsize, depth, gridsize, totheight + gridsize, text); offset = gridsize + fontsize; } else { methods->box(loutput, 0xff, 0xff, 0xff, depth, 0, totwidth, totheight, gridsize + (gridsize + fontsize)*(2+loutput->legend_append_nr)); offset = 0; } /* Display whether we're showing physical or logical IDs */ snprintf(text, sizeof(text), "Indexes: %s", logical ? "logical" : "physical"); methods->text(loutput, 0, 0, 0, fontsize, depth, gridsize, totheight + gridsize + offset, text); /* Display timestamp */ t = time(NULL); #ifdef HAVE_STRFTIME { struct tm *tmp; tmp = localtime(&t); strftime(text, sizeof(text), "Date: %c", tmp); } #else /* HAVE_STRFTIME */ { char *date; int n; date = ctime(&t); n = strlen(date); if (n && date[n-1] == '\n') { date[n-1] = 0; } snprintf(text, sizeof(text), "Date: %s", date); } #endif /* HAVE_STRFTIME */ methods->text(loutput, 0, 0, 0, fontsize, depth, gridsize, totheight + gridsize + offset + fontsize + gridsize, text); offset = totheight + gridsize + offset + (fontsize + gridsize) * 2; for(i=0; i<loutput->legend_append_nr; i++) { methods->text(loutput, 0, 0, 0, fontsize, depth, gridsize, offset, loutput->legend_append[i]); offset += fontsize + gridsize; } } }
static void fig(hwloc_topology_t topology, struct draw_methods *methods, int logical, int legend, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned y) { unsigned totwidth, totheight, offset, i; time_t t; char text[128]; char hostname[128] = ""; unsigned long hostname_size = sizeof(hostname); system_draw(topology, methods, logical, level, output, depth, x, &totwidth, y, &totheight); if (totwidth < 20*fontsize) totwidth = 20*fontsize; if (legend) { /* Display the hostname, but only if we're showing *this* system */ if (hwloc_topology_is_thissystem(topology)) { #ifdef HWLOC_WIN_SYS GetComputerName(hostname, &hostname_size); #else gethostname(hostname, hostname_size); #endif } if (*hostname) { snprintf(text, sizeof(text), "Host: %s", hostname); methods->box(output, 0xff, 0xff, 0xff, depth, 0, totwidth, totheight, gridsize + (gridsize + fontsize)*(3+lstopo_append_legends_nr)); methods->text(output, 0, 0, 0, fontsize, depth, gridsize, totheight + gridsize, text); offset = gridsize + fontsize; } else { methods->box(output, 0xff, 0xff, 0xff, depth, 0, totwidth, totheight, gridsize + (gridsize + fontsize)*(2+lstopo_append_legends_nr)); offset = 0; } /* Display whether we're showing physical or logical IDs */ snprintf(text, sizeof(text), "Indexes: %s", logical ? "logical" : "physical"); methods->text(output, 0, 0, 0, fontsize, depth, gridsize, totheight + gridsize + offset, text); /* Display timestamp */ t = time(NULL); #ifdef HAVE_STRFTIME { struct tm *tmp; tmp = localtime(&t); strftime(text, sizeof(text), "Date: %c", tmp); } #else /* HAVE_STRFTIME */ { char *date; int n; date = ctime(&t); n = strlen(date); if (n && date[n-1] == '\n') { date[n-1] = 0; } snprintf(text, sizeof(text), "Date: %s", date); } #endif /* HAVE_STRFTIME */ methods->text(output, 0, 0, 0, fontsize, depth, gridsize, totheight + gridsize + offset + fontsize + gridsize, text); offset = totheight + gridsize + offset + (fontsize + gridsize) * 2; for(i=0; i<lstopo_append_legends_nr; i++) { methods->text(output, 0, 0, 0, fontsize, depth, gridsize, offset, lstopo_append_legends[i]); offset += fontsize + gridsize; } } }