/** ** Supermodel ** A Sega Model 3 Arcade Emulator. ** Copyright 2011-2016 Bart Trzynadlowski, Nik Henson ** ** This file is part of Supermodel. ** ** Supermodel is free software: you can redistribute it and/or modify it under ** the terms of the GNU General Public License as published by the Free ** Software Foundation, either version 3 of the License, or (at your option) ** any later version. ** ** Supermodel is distributed in the hope that it will be useful, but WITHOUT ** ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ** FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for ** more details. ** ** You should have received a copy of the GNU General Public License along ** with Supermodel. If not, see <http://www.gnu.org/licenses/>. **/ /* * PolyAnalysis.h * * HTML GUI used to analyze polygon header bits. */ #ifndef INCLUDED_POLYANALYSIS_H #define INCLUDED_POLYANALYSIS_H static const char s_polyAnalysisHTMLPrologue[] = { "<html>\n" "<head>\n" " <style>\n" " left { float: left; }\n" " table { table-layout: fixed; }\n" " td { border: 1px solid black; width: 1em; }\n" " td.nonselectable { background-color: gray; }\n" " td.selectable { background-color: #5555ee; }\n" " td.selected { background-color: #22ff22; }\n" " </style>\n" " <script src='https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js'></script>\n" "</head>\n" "<body>\n" " <div id='Header'>\n" " <div id='PolyBits' class='left'></div>\n" " <div id='CullingBits' class='left'></div>\n" " </div>\n" " <div><img id='Image' /></div>\n" " <script>\n" // Insert g_file_base_name, g_unknown_poly_bits, and g_unknown_culling_bits here, then append epilogue }; static const char s_polyAnalysisHTMLEpilogue[] = { " function hex32(val)\n" " {\n" " return '0x' + ('0000000'+Number(val).toString(16)).slice(-8);\n" " }\n" " function createOnClickHandler(type, table, td, word, mask)\n" " {\n" " return function()\n" " {\n" " var file = g_file_base_name + '.' + type + '.' + word + '_' + hex32(mask) + '.bmp';\n" " $('td').removeClass('selected'); // remove from all cells\n" " td.addClass('selected');\n" " $('#Image').empty();\n" " $('#Image').attr('src', file);\n" " };\n" " }\n" " function buildTable(num_words, type, unknown_bits)\n" " {\n" " var table = $('<table></table>');\n" " var bits_tr = $('<tr></tr>'); // first row will be bit legend\n" " bits_tr.append($('<td></td>')); // column for word numbers\n" " for (var bit = 31; bit >= 0; bit--)\n" " bits_tr.append($('<td>'+bit+'</td>'));\n" " table.append(bits_tr);\n" " for (var word = 0; word < num_words; word++)\n" " {\n" " var tr = $('<tr></tr>');\n" " tr.append($('<td>'+word+'</td>'));\n" " for (var bit = 31; bit >= 0; bit--)\n" " {\n" " var mask = 1 << bit;\n" " var td = $('<td></td>');\n" " if (unknown_bits[word] & mask)\n" " td.addClass('selectable').click(createOnClickHandler(type, table, td, word, mask));\n" " else\n" " td.addClass('nonselectable');\n" " tr.append(td);\n" " }\n" " table.append(tr);\n" " }\n" " return table;" " }\n" " $(document).ready(function()\n" " {\n" " // Construct tables\n" " var poly_table = buildTable(7, 'poly', g_unknown_poly_bits);\n" " var poly_title = $('<p></p>').text('Polygon Header');\n" " $('#PolyBits').append(poly_title);\n" " $('#PolyBits').append(poly_table);\n" " var culling_table = buildTable(10, 'culling', g_unknown_culling_bits);\n" " var culling_title = $('<p></p>').text('Culling Node');\n" " $('#CullingBits').append(culling_title);\n" " $('#CullingBits').append(culling_table);\n" " });\n" " </script>\n" "</body>\n" }; #endif // INCLUDED_POLYANALYSIS_H