summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--print_wiki.c134
1 files changed, 79 insertions, 55 deletions
diff --git a/print_wiki.c b/print_wiki.c
index 68a69a9..617053c 100644
--- a/print_wiki.c
+++ b/print_wiki.c
@@ -35,15 +35,21 @@ Please do '''not''' edit these tables in the wiki directly, they are \
generated by pasting '''flashrom -z''' output.<br />\
'''Last update:''' %s(generated by flashrom %s)\n</small></div>\n";
+static const char th_start[] = "| valign=\"top\"|\n\n\
+{| border=\"0\" style=\"font-size: smaller\" valign=\"top\"\n\
+|- bgcolor=\"#6699dd\"\n";
+
#if CONFIG_INTERNAL == 1
-static const char chipset_th[] = "{| border=\"0\" style=\"font-size: smaller\"\n\
-|- bgcolor=\"#6699dd\"\n! align=\"left\" | Vendor\n\
-! align=\"left\" | Southbridge\n! align=\"center\" | PCI IDs\n\
+static const char chipset_th[] = "\
+! align=\"left\" | Vendor\n\
+! align=\"left\" | Southbridge\n\
+! align=\"center\" | PCI IDs\n\
! align=\"center\" | Status\n\n";
-static const char board_th[] = "{| border=\"0\" style=\"font-size: smaller\" \
-valign=\"top\"\n|- bgcolor=\"#6699dd\"\n! align=\"left\" | Vendor\n\
-! align=\"left\" | Mainboard\n! align=\"left\" | Required option\n\
+static const char board_th[] = "\
+! align=\"left\" | Vendor\n\
+! align=\"left\" | Mainboard\n\
+! align=\"left\" | Required option\n\
! align=\"center\" | Status\n\n";
static const char board_intro[] = "\
@@ -59,9 +65,7 @@ not work (we don't know, someone has to give it a try). Please report any \
further verified mainboards on the [[Mailinglist|mailing list]].\n";
#endif
-static const char chip_th[] = "{\
-| border=\"0\" style=\"font-size: smaller\" valign=\"top\"\n\
-|- bgcolor=\"#6699dd\"\n\
+static const char chip_th[] = "\
! align=\"left\" | Vendor\n\
! align=\"left\" | Device\n\
! align=\"center\" | Size [kB]\n\
@@ -72,14 +76,16 @@ static const char chip_th[] = "{\
| Probe\n| Read\n| Erase\n| Write\n\
| align=\"center\" | Min \n| align=\"center\" | Max\n\n";
-static const char programmer_section[] = "\
-\n== Supported programmers ==\n\nThis is a list \
-of supported PCI devices flashrom can use as programmer:\n\n{| border=\"0\" \
-valign=\"top\"\n| valign=\"top\"|\n\n{| border=\"0\" style=\"font-size: \
-smaller\" valign=\"top\"\n|- bgcolor=\"#6699dd\"\n! align=\"left\" | Vendor\n\
-! align=\"left\" | Device\n! align=\"center\" | PCI IDs\n\
+static const char programmer_th[] = "\
+! align=\"left\" | Vendor\n\
+! align=\"left\" | Device\n\
+! align=\"center\" | PCI IDs\n\
! align=\"center\" | Status\n\n";
+static const char programmer_intro[] = "\
+\n== Supported programmers ==\n\n\
+This is a list of supported PCI devices flashrom can use as programmer:\n\n{";
+
#if CONFIG_INTERNAL == 1
static const char laptop_intro[] = "\n== Supported laptops/notebooks ==\n\n\
In general, flashing laptops is more difficult because laptops\n\n\
@@ -94,18 +100,25 @@ wrong (a working backup flash chip and/or good soldering skills).\n</div>\n";
static void print_supported_chipsets_wiki(int cols)
{
- int i, j, enablescount = 0, color = 1;
+ int i;
+ unsigned int lines_per_col;
const struct penable *e;
+ int enablescount = 0, color = 1;
for (e = chipset_enables; e->vendor_name != NULL; e++)
enablescount++;
- printf("\n== Supported chipsets ==\n\nTotal amount of supported "
- "chipsets: '''%d'''\n\n{| border=\"0\" valign=\"top\"\n| "
- "valign=\"top\"|\n\n%s", enablescount, chipset_th);
+ /* +1 to force the resulting number of columns to be < cols */
+ lines_per_col = enablescount / cols + ((enablescount%cols) > 0 ? 1 : 0);
+
+ printf("\n== Supported chipsets ==\n\nTotal amount of supported chipsets: '''%d'''\n\n"
+ "{| border=\"0\" valign=\"top\"\n", enablescount);
e = chipset_enables;
- for (i = 0, j = 0; e[i].vendor_name != NULL; i++, j++) {
+ for (i = 0; e[i].vendor_name != NULL; i++) {
+ if ((i % lines_per_col) == 0)
+ printf("%s%s", th_start, chipset_th);
+
/* Alternate colors if the vendor changes. */
if (i > 0 && strcmp(e[i].vendor_name, e[i - 1].vendor_name))
color = !color;
@@ -116,20 +129,20 @@ static void print_supported_chipsets_wiki(int cols)
e[i].vendor_id, e[i].device_id,
(e[i].status == OK) ? "{{OK}}" : "{{?3}}");
- /* Split table in 'cols' columns. */
- if (j >= (enablescount / cols + 1)) {
- printf("\n|}\n\n| valign=\"top\"|\n\n%s", chipset_th);
- j = 0;
- }
+ if (((i % lines_per_col) + 1) == lines_per_col)
+ printf("\n|}\n\n");
}
- printf("\n|}\n\n|}\n");
+ /* end inner table if it did not fill the last column fully */
+ if (((i % lines_per_col)) > 0)
+ printf("\n|}\n\n");
+ printf("\n\n|}\n");
}
-static void wiki_helper(const char *devicetype, int cols,
- const struct board_info boards[])
+static void wiki_helper(const char *devicetype, int cols, const struct board_info boards[])
{
- int i, j, k;
+ int i, k;
+ unsigned int boardcount, lines_per_col;
unsigned int boardcount_good = 0, boardcount_bad = 0, boardcount_nt = 0;
int num_notes = 0, color = 1;
char *notes = calloc(1, 1);
@@ -144,14 +157,19 @@ static void wiki_helper(const char *devicetype, int cols,
else
boardcount_bad++;
}
+ boardcount = boardcount_good + boardcount_nt + boardcount_bad;
+
+ /* +1 to force the resulting number of columns to be < cols */
+ lines_per_col = boardcount / cols + ((boardcount%cols) > 0 ? 1 : 0);
printf("\n\nTotal amount of known good boards %s: '''%d'''; "
"Untested (e.g. user vanished before testing new code): '''%d'''; "
"Not yet supported (i.e. known-bad): '''%d'''.\n\n"
- "{| border=\"0\" valign=\"top\"\n| valign=\"top\"|\n\n%s",
- devicetype, boardcount_good, boardcount_nt, boardcount_bad, board_th);
+ "{| border=\"0\" valign=\"top\"\n", devicetype, boardcount_good, boardcount_nt, boardcount_bad);
- for (i = 0, j = 0; boards[i].vendor != NULL; i++, j++) {
+ for (i = 0; boards[i].vendor != NULL; i++) {
+ if ((i % lines_per_col) == 0)
+ printf("%s%s", th_start, board_th);
/* Alternate colors if the vendor changes. */
if (i > 0 && strcmp(boards[i].vendor, boards[i - 1].vendor))
@@ -187,14 +205,14 @@ static void wiki_helper(const char *devicetype, int cols,
printf("\n");
}
- /* Split table in 'cols' columns. */
- if (j >= ((boardcount_good + boardcount_bad) / cols + 1)) {
- printf("\n|}\n\n| valign=\"top\"|\n\n%s", board_th);
- j = 0;
- }
+ if (((i % lines_per_col) + 1) == lines_per_col)
+ printf("\n|}\n\n");
}
- printf("\n|}\n\n|}\n");
+ /* end inner table if it did not fill the last column fully */
+ if (((i % lines_per_col)) > 0)
+ printf("\n|}\n\n");
+ printf("\n\n|}\n");
if (num_notes > 0)
printf("\n<small>\n%s</small>\n", notes);
@@ -213,12 +231,13 @@ static void print_supported_boards_wiki(void)
static void print_supported_chips_wiki(int cols)
{
- int i = 0, c = 1, chipcount = 0;
- const struct flashchip *f, *old = NULL;
+ unsigned int lines_per_col;
uint32_t t;
char *s;
char vmax[6];
char vmin[6];
+ const struct flashchip *f, *old = NULL;
+ int i = 0, c = 1, chipcount = 0;
for (f = flashchips; f->name != NULL; f++) {
/* Don't count generic entries. */
@@ -229,21 +248,27 @@ static void print_supported_chips_wiki(int cols)
chipcount++;
}
- printf("\n== Supported chips ==\n\nTotal amount of supported "
- "chips: '''%d'''\n\n{| border=\"0\" valign=\"top\"\n"
- "| valign=\"top\"|\n\n%s", chipcount, chip_th);
+ /* +1 to force the resulting number of columns to be < cols */
+ lines_per_col = chipcount / cols + ((chipcount%cols) > 0 ? 1 : 0);
+
+ printf("\n== Supported chips ==\n\nTotal amount of supported chips: '''%d'''\n\n"
+ "{| border=\"0\" valign=\"top\"\n", chipcount);
- for (f = flashchips; f->name != NULL; f++, i++) {
+ for (f = flashchips; f->name != NULL; f++) {
/* Don't print generic entries. */
if (!strncmp(f->vendor, "Unknown", 7) ||
!strncmp(f->vendor, "Programmer", 10) ||
!strncmp(f->name, "unknown", 7))
continue;
+ if ((i % lines_per_col) == 0)
+ printf("%s%s", th_start, chip_th);
+
/* Alternate colors if the vendor changes. */
if (old != NULL && strcmp(old->vendor, f->vendor))
c = !c;
+ old = f;
t = f->tested;
s = flashbuses_to_text(f->bustype);
sprintf(vmin, "%0.03f", f->voltage.min / (double)1000);
@@ -267,16 +292,14 @@ static void print_supported_chips_wiki(int cols)
f->voltage.min ? vmax : "N/A");
free(s);
- /* Split table into 'cols' columns. */
- if (i >= (chipcount / cols + 1)) {
- printf("\n|}\n\n| valign=\"top\"|\n\n%s", chip_th);
- i = 0;
- }
-
- old = f;
+ if (((i % lines_per_col) + 1) == lines_per_col)
+ printf("\n|}\n\n");
+ i++;
}
-
- printf("\n|}\n\n|}\n");
+ /* end inner table if it did not fill the last column fully */
+ if (((i % lines_per_col)) > 0)
+ printf("\n|}\n\n");
+ printf("|}\n\n");
}
/* Not needed for CONFIG_INTERNAL, but for all other PCI-based programmers. */
@@ -309,7 +332,8 @@ void print_supported_wiki(void)
print_supported_chipsets_wiki(3);
print_supported_boards_wiki();
#endif
- printf("%s", programmer_section);
+ printf("%s%s%s", programmer_intro, th_start, programmer_th);
+
#if CONFIG_NIC3COM == 1
print_supported_pcidevs_wiki(nics_3com);
#endif
@@ -343,6 +367,6 @@ void print_supported_wiki(void)
#if CONFIG_SATAMV == 1
print_supported_pcidevs_wiki(satas_mv);
#endif
- printf("\n|}\n");
+ printf("\n|}\n\n|}\n");
}
OpenPOWER on IntegriCloud