visualfail: collapse repeating instructions

Change-Id: I7d3bbb9eb79b502acabeeeab9886bf20177e68c6
This commit is contained in:
Horst Schirmeier
2015-01-08 15:43:24 +01:00
parent 957f9c9357
commit 4d070c6362

View File

@ -170,6 +170,38 @@ function asmCode()
echo json_encode($content); echo json_encode($content);
} }
function collapse_repeated($html, $disasm, $force_finish)
{
static $last_disasm = '';
static $collect = array();
$limit_before = $limit_after = 3;
$out = '';
if ($force_finish || $last_disasm != $disasm) {
if (count($collect) > $limit_before + $limit_after + 1) {
for ($i = 0; $i < $limit_before; ++$i) {
$out .= $collect[$i];
}
$out .= '<i>-- omitted ' . (count($collect) - $limit_before - $limit_after) . " repetitions of '$last_disasm'</i><br>";
for ($i = count($collect) - $limit_after; $i < count($collect); ++$i) {
$out .= $collect[$i];
}
} else {
$out = implode('', $collect);
}
$last_disasm = $disasm;
$collect = array();
}
if ($force_finish) {
$out .= $html;
} else {
$collect[] = $html;
}
return $out;
}
function getAsmCode() function getAsmCode()
{ {
$content = ""; $content = "";
@ -188,25 +220,26 @@ function getAsmCode()
// FIXME id not unique // FIXME id not unique
$content = '<div id="maxFehler" '; $content = '<div id="maxFehler" ';
foreach ($resulttypes as $value) { foreach ($resulttypes as $value) {
$temp = $value . '="' . $fehlerdaten['max'][$value] . '" '; $temp = $value . '="' . $fehlerdaten['max'][$value] . '" ';
$content .= $temp; $content .= $temp;
} }
$content .= ' >'; $content .= ' >';
while ($row = mysql_fetch_object($asmcode)) { while ($row = mysql_fetch_object($asmcode)) {
if (array_key_exists($row->instr_address,$fehlerdaten['Daten'])) { if (array_key_exists($row->instr_address,$fehlerdaten['Daten'])) {
$content .= '<span data-address="' . dechex($row->instr_address) . '" class="hasFehler" '; $line = '<span data-address="' . dechex($row->instr_address) . '" class="hasFehler" ';
foreach ($resulttypes as $value) { foreach ($resulttypes as $value) {
$content .= $value . '="' . $fehlerdaten['Daten'][$row->instr_address][$value] . '" '; $line .= $value . '="' . $fehlerdaten['Daten'][$row->instr_address][$value] . '" ';
} }
$content .= ' style="cursor: pointer;">' . dechex($row->instr_address) . ' ' . htmlspecialchars($row->disassemble) . '</span>'; $line .= ' style="cursor: pointer;">' . dechex($row->instr_address) . ' ' . htmlspecialchars($row->disassemble) . '</span><br>';
$content .= collapse_repeated($line, 'dontcare', true);
} else { } else {
$content .= dechex($row->instr_address) . ' ' . htmlspecialchars($row->disassemble); $line = dechex($row->instr_address) . ' ' . htmlspecialchars($row->disassemble) . '<br>';
$content .= collapse_repeated($line, htmlspecialchars($row->disassemble), false);
} }
$content .= '<br>';
} }
$content .= collapse_repeated('', '', true);
$content .= ' </div>'; $content .= ' </div>';
echo json_encode($content); echo json_encode($content);
@ -265,13 +298,15 @@ function getHighlevelCode()
$maxFehler[$value] += $fehlerdaten['Daten'][$row->instr_address][$value]; $maxFehler[$value] += $fehlerdaten['Daten'][$row->instr_address][$value];
} }
$newline .= ' style="cursor: pointer;">' . dechex($row->instr_address) . ' ' . htmlspecialchars($row->disassemble) . '</span>'; $newline .= ' style="cursor: pointer;">' . dechex($row->instr_address) . ' ' . htmlspecialchars($row->disassemble) . '</span><br>';
$newline = collapse_repeated($newline, 'dontcare', true);
} else { } else {
$newline = dechex($row->instr_address) . ' ' . htmlspecialchars($row->disassemble); $newline = dechex($row->instr_address) . ' ' . htmlspecialchars($row->disassemble) . '<br>';
$newline = collapse_repeated($newline, htmlspecialchars($row->disassemble), false);
} }
$newline .= '<br>';
$mapping[$lineNumber] [] = $newline; $mapping[$lineNumber] [] = $newline;
} }
$mapping[$lineNumber] [] = collapse_repeated('', '', true);
} }
foreach ($resulttypes as $value) { foreach ($resulttypes as $value) {
$maxFehlerMapping[$lineNumber][$value] = $maxFehler[$value]; $maxFehlerMapping[$lineNumber][$value] = $maxFehler[$value];