int main(int argc, char *argv[]) { /* first argument is the directory */ if (argc < 4) { fprintf(stderr, "Usage:\npngcmp <image1> <image2> <outfile>\n"); return 10; } astring imgfilename1(argv[1]); astring imgfilename2(argv[2]); astring outfilename(argv[3]); try { return generate_png_diff(imgfilename1, imgfilename2, outfilename); } catch(...) { printf("Exception occured"); return 1000; } }
static void append_driver_list_table(const char *header, std::string &dirname, util::core_file &indexfile, const summary_file *listhead, std::string &tempheader, std::string &tempfooter) { const summary_file *curfile, *prevfile; int width = 100 / (2 + list_count); int listnum; /* output a header */ indexfile.printf("\t<h2>%s</h2>\n", header); /* start the table */ indexfile.printf("\t<p><table width=\"90%%\">\n"); indexfile.printf("\t\t<tr>\n\t\t\t<th width=\"%d%%\">Source</th><th width=\"%d%%\">Driver</th>", width, width); for (listnum = 0; listnum < list_count; listnum++) indexfile.printf("<th width=\"%d%%\">%s</th>", width, lists[listnum].version); indexfile.printf("\n\t\t</tr>\n"); /* if nothing, print a default message */ if (listhead == nullptr) { indexfile.printf("\t\t<tr>\n\t\t\t"); indexfile.printf("<td colspan=\"%d\" align=\"center\">(No regressions detected)</td>", list_count + 2); indexfile.printf("\n\t\t</tr>\n"); } /* iterate over files */ for (prevfile = nullptr, curfile = listhead; curfile != nullptr; prevfile = curfile, curfile = curfile->next) { int rowspan = 0, uniqueshots = 0; char pngdiffname[40]; /* if this is the first entry in this source file, count how many rows we need to span */ if (prevfile == nullptr || strcmp(prevfile->source, curfile->source) != 0) { const summary_file *cur; for (cur = curfile; cur != nullptr; cur = cur->next) if (strcmp(cur->source, curfile->source) == 0) rowspan++; else break; } /* create screenshots if necessary */ pngdiffname[0] = 0; for (listnum = 0; listnum < list_count; listnum++) if (curfile->matchbitmap[listnum] == listnum) uniqueshots++; if (uniqueshots > 1) { sprintf(pngdiffname, "compare_%s.png", curfile->name); if (generate_png_diff(curfile, dirname, pngdiffname) != 0) pngdiffname[0] = 0; } /* create a linked file */ create_linked_file(dirname, curfile, prevfile, curfile->next, (pngdiffname[0] == 0) ? nullptr : pngdiffname, tempheader, tempfooter); /* create a row */ indexfile.printf("\t\t<tr>\n\t\t\t"); if (rowspan > 0) indexfile.printf("<td rowspan=\"%d\">%s</td>", rowspan, curfile->source); indexfile.printf("<td><a href=\"%s.html\">%s</a></td>", curfile->name, curfile->name); for (listnum = 0; listnum < list_count; listnum++) { int unique_index = -1; if (pngdiffname[0] != 0) unique_index = get_unique_index(curfile, listnum); if (unique_index != -1) indexfile.printf("<td><span style=\"%s\"> </span> %s [<a href=\"%s\" target=\"blank\">%d</a>]</td>", status_color[curfile->status[listnum]], status_text[curfile->status[listnum]], pngdiffname, unique_index); else indexfile.printf("<td><span style=\"%s\"> </span> %s</td>", status_color[curfile->status[listnum]], status_text[curfile->status[listnum]]); } indexfile.printf("\n\t\t</tr>\n"); /* also print the name and source file */ printf("%s %s\n", curfile->name, curfile->source); } /* end of table */ indexfile.printf("</table></p>\n"); }