<commit_before><html>
<head>
	<script src='lib/codemirror/codemirror.min.js'></script>
	<script src='lib/codemirror/octomode.js'></script>
  <script src='lib/filesaver.js'></script>
  <script src='js/emulator.js'></script>
  <script src='js/compiler.js'></script>
  <script src='js/decompiler.js'></script>
  <script src='js/shared.js'></script>
  <script src='js/util.js'></script>
  <script src='js/sharing.js'></script>
  <script src='js/input.js'></script>

	<link rel='stylesheet' href='lib/codemirror/codemirror.min.css'>
	<link rel='stylesheet' href='lib/codemirror/monokai.css'>
</head>

<body>
  <div id='header'>
    <a href='https://github.com/JohnEarnest/Octo'><img src='images/logo.png'/></a>
    <input type="file" id="maininput" style="display:none">
    <div class='head' id='main-run'>Run</div>
    <div class='head' id='main-open'>Open</div>
    <div class='head' id='main-save'>Share</div>
    <div class='menu' id='main-examples'>
      <div class='head'>Examples</div>
      <ul>
        <li>loading...</li>
      <ul>
    </div>
    <div class='menu' id='main-speed'>
      <div class='head'>Speed</div>
      <ul>
        <li data-value='7'>7 Cycles/Frame</li>
        <li data-value='15'>15 Cycles/Frame</li>
        <li data-value='20'>20 Cycles/Frame</li>
        <li data-value='30'>30 Cycles/Frame</li>
        <li data-value='100'>100 Cycles/Frame</li>
        <li data-value='200'>200 Cycles/Frame</li>
        <li data-value='500'>500 Cycles/Frame</li>
        <li data-value='1000'>1000 Cycles/Frame</li>
        <li data-value='20000'>Ludicrous Speed</li>
      </ul>
    </div>
    <div class='spacer'></div>
    <div id='show-manual'>Manual</div>
    <div id='show-toolbox'>Toolbox</div>
  </div>

  <div id='main'>
    <div id='editor'></div>

    <div id='manual'>
      <iframe src="https://johnearnest.github.io/Octo/docs/Manual.html"></iframe>
    </div>

    <div id='toolbox'>
      <div data-panel='sprite' class='tool-header'>Sprite Editor</div>
      <div data-panel='sprite' class='tool-body'>
        <div class='buttonbar'>
          <div id='sprite-16'>16x16 Sprite</div>
          <div id='sprite-color'>Color Sprite</div>
          <div id='sprite-left'>&lt;&lt;1</div>
          <div id='sprite-right'>&gt;&gt;1</div>
          <div id='sprite-up'>&and;</div>
          <div id='sprite-down'>&or;</div>
          <div id='sprite-clear'>Clear</div>
        </div>
        <div id='sprite-palette'>
          <span data-value='0'>Background</span>
          <span data-value='1'>Foreground 1</span>
          <span data-value='2'>Foreground 2</span>
          <span data-value='3'>Blended</span>
        </div>
        <div class='preview-container'>
          <canvas id='sprite-draw'></canvas>
        </div>
        <div id='sprite-editor'></div>
      </div>

      <div data-panel='audio' class='tool-header'>Audio Editor</div>
      <div data-panel='audio' class='tool-body'>
        <h1>Audio Pattern</h1>
        <div id='audio-error'></div>
        <div class='preview-container'>
          <canvas id='audio-pattern-view' width='256' height='32'></canvas>
        </div>
        <div id='audio-pattern-editor'></div>
        <div class='buttonbar'>
          <div id='audio-play'  >Play</div>
          <div id='audio-random'>Randomize</div>
          <div id='audio-clear' >Clear</div>
          <div id='audio-left'  >&lt;&lt;1</div>
          <div id='audio-right' >&gt;&gt;1</div>
          <div id='audio-not'>NOT</div>
        </div>

        <h1>Blend With Pattern</h1>
        <div id='audio-blend-editor'></div>
        <div class='buttonbar'>
          <div id='audio-and'>AND</div>
          <div id='audio-or'>OR</div>
          <div id='audio-xor'>XOR</div>
          <div id='audio-swap'>Swap With Pattern</div>
        </div>

        <h1>Tone Generator</h1>
        <div class='preview-container'>
          <canvas id='audio-tone-view' width='256' height='32'></canvas>
        </div>
        <div id='audio-tone-editor'></div>
        <div id='audio-tone-group'>
          <div class='pair'>Frequency: <input id='audio-freq' value='440'> Hz</div>
          <div class='pair'>Cutoff: <input id='audio-cutoff' value='128'></div>
          <div id='audio-toblend' class='button'>To Blend</div>
          <div id='audio-topat' class='button'>To Pattern</div>
        </div>
      </div>

      <div data-panel='binary' class='tool-header'>Binary Tools</div>
      <div data-panel='binary' class='tool-body'>
        <h1>Binary Input</h1>
        <input type="file" id="fileinput" style="display:none">
        <div id='binary-editor'></div>
        <div class='buttonbar'>
          <div id='binary-open'>Open <tt>.ch8</tt>...</div>
          <div id='binary-decompile'>Decompile</div>
          <div id='binary-run'>Run</div>
        </div>
        <h1>Decompiler Mode</h1>
        <div id='decompiler-mode'>
          <span data-value='raw'>Raw</span>
          <span data-value='static'>Static Analysis</span>
        </div>
        <h1>Decompiler Numeric Format</h1>
        <div id='decompiler-numbers'>
          <span data-value='bin'>Binary</span>
          <span data-value='dec'>Decimal</span>
          <span data-value='hex'>Hexadecimal</span>
        </div>
        <h1>Linter Mode</h1>
        <div id='linter-mode'>
          <span data-value='none'>No Linting</span>
          <span data-value='pedantic'>Pedantic Linting</span>
        </div>
        <h1>File Output</h1>
        <div>
          <input id='binary-filename' value='output'>
        </div>
        <div class='buttonbar'>
          <div id='binary-save-8o'>Save <tt>.8o</tt></div>
          <div id='binary-save-ch8'>Save <tt>.ch8</tt></div>
          <div id='binary-save-cart'>Save Cartridge...</div>
          <div id='binary-save-html'>Save HTML...</div>
        </div>
      </div>

      <div data-panel='color' class='tool-header'>Colors</div>
      <div data-panel='color' class='tool-body'><commit_msg>rename the Colors panel to Appearance, now that it also contains settings for the built-in chip8 fonts.<commit_after><html>
<head>
	<script src='lib/codemirror/codemirror.min.js'></script>
	<script src='lib/codemirror/octomode.js'></script>
  <script src='lib/filesaver.js'></script>
  <script src='js/emulator.js'></script>
  <script src='js/compiler.js'></script>
  <script src='js/decompiler.js'></script>
  <script src='js/shared.js'></script>
  <script src='js/util.js'></script>
  <script src='js/sharing.js'></script>
  <script src='js/input.js'></script>

	<link rel='stylesheet' href='lib/codemirror/codemirror.min.css'>
	<link rel='stylesheet' href='lib/codemirror/monokai.css'>
</head>

<body>
  <div id='header'>
    <a href='https://github.com/JohnEarnest/Octo'><img src='images/logo.png'/></a>
    <input type="file" id="maininput" style="display:none">
    <div class='head' id='main-run'>Run</div>
    <div class='head' id='main-open'>Open</div>
    <div class='head' id='main-save'>Share</div>
    <div class='menu' id='main-examples'>
      <div class='head'>Examples</div>
      <ul>
        <li>loading...</li>
      <ul>
    </div>
    <div class='menu' id='main-speed'>
      <div class='head'>Speed</div>
      <ul>
        <li data-value='7'>7 Cycles/Frame</li>
        <li data-value='15'>15 Cycles/Frame</li>
        <li data-value='20'>20 Cycles/Frame</li>
        <li data-value='30'>30 Cycles/Frame</li>
        <li data-value='100'>100 Cycles/Frame</li>
        <li data-value='200'>200 Cycles/Frame</li>
        <li data-value='500'>500 Cycles/Frame</li>
        <li data-value='1000'>1000 Cycles/Frame</li>
        <li data-value='20000'>Ludicrous Speed</li>
      </ul>
    </div>
    <div class='spacer'></div>
    <div id='show-manual'>Manual</div>
    <div id='show-toolbox'>Toolbox</div>
  </div>

  <div id='main'>
    <div id='editor'></div>

    <div id='manual'>
      <iframe src="https://johnearnest.github.io/Octo/docs/Manual.html"></iframe>
    </div>

    <div id='toolbox'>
      <div data-panel='sprite' class='tool-header'>Sprite Editor</div>
      <div data-panel='sprite' class='tool-body'>
        <div class='buttonbar'>
          <div id='sprite-16'>16x16 Sprite</div>
          <div id='sprite-color'>Color Sprite</div>
          <div id='sprite-left'>&lt;&lt;1</div>
          <div id='sprite-right'>&gt;&gt;1</div>
          <div id='sprite-up'>&and;</div>
          <div id='sprite-down'>&or;</div>
          <div id='sprite-clear'>Clear</div>
        </div>
        <div id='sprite-palette'>
          <span data-value='0'>Background</span>
          <span data-value='1'>Foreground 1</span>
          <span data-value='2'>Foreground 2</span>
          <span data-value='3'>Blended</span>
        </div>
        <div class='preview-container'>
          <canvas id='sprite-draw'></canvas>
        </div>
        <div id='sprite-editor'></div>
      </div>

      <div data-panel='audio' class='tool-header'>Audio Editor</div>
      <div data-panel='audio' class='tool-body'>
        <h1>Audio Pattern</h1>
        <div id='audio-error'></div>
        <div class='preview-container'>
          <canvas id='audio-pattern-view' width='256' height='32'></canvas>
        </div>
        <div id='audio-pattern-editor'></div>
        <div class='buttonbar'>
          <div id='audio-play'  >Play</div>
          <div id='audio-random'>Randomize</div>
          <div id='audio-clear' >Clear</div>
          <div id='audio-left'  >&lt;&lt;1</div>
          <div id='audio-right' >&gt;&gt;1</div>
          <div id='audio-not'>NOT</div>
        </div>

        <h1>Blend With Pattern</h1>
        <div id='audio-blend-editor'></div>
        <div class='buttonbar'>
          <div id='audio-and'>AND</div>
          <div id='audio-or'>OR</div>
          <div id='audio-xor'>XOR</div>
          <div id='audio-swap'>Swap With Pattern</div>
        </div>

        <h1>Tone Generator</h1>
        <div class='preview-container'>
          <canvas id='audio-tone-view' width='256' height='32'></canvas>
        </div>
        <div id='audio-tone-editor'></div>
        <div id='audio-tone-group'>
          <div class='pair'>Frequency: <input id='audio-freq' value='440'> Hz</div>
          <div class='pair'>Cutoff: <input id='audio-cutoff' value='128'></div>
          <div id='audio-toblend' class='button'>To Blend</div>
          <div id='audio-topat' class='button'>To Pattern</div>
        </div>
      </div>

      <div data-panel='binary' class='tool-header'>Binary Tools</div>
      <div data-panel='binary' class='tool-body'>
        <h1>Binary Input</h1>
        <input type="file" id="fileinput" style="display:none">
        <div id='binary-editor'></div>
        <div class='buttonbar'>
          <div id='binary-open'>Open <tt>.ch8</tt>...</div>
          <div id='binary-decompile'>Decompile</div>
          <div id='binary-run'>Run</div>
        </div>
        <h1>Decompiler Mode</h1>
        <div id='decompiler-mode'>
          <span data-value='raw'>Raw</span>
          <span data-value='static'>Static Analysis</span>
        </div>
        <h1>Decompiler Numeric Format</h1>
        <div id='decompiler-numbers'>
          <span data-value='bin'>Binary</span>
          <span data-value='dec'>Decimal</span>
          <span data-value='hex'>Hexadecimal</span>
        </div>
        <h1>Linter Mode</h1>
        <div id='linter-mode'>
          <span data-value='none'>No Linting</span>
          <span data-value='pedantic'>Pedantic Linting</span>
        </div>
        <h1>File Output</h1>
        <div>
          <input id='binary-filename' value='output'>
        </div>
        <div class='buttonbar'>
          <div id='binary-save-8o'>Save <tt>.8o</tt></div>
          <div id='binary-save-ch8'>Save <tt>.ch8</tt></div>
          <div id='binary-save-cart'>Save Cartridge...</div>
          <div id='binary-save-html'>Save HTML...</div>
        </div>
      </div>

      <div data-panel='color' class='tool-header'>Appearance</div>
      <div data-panel='color' class='tool-body'>
{'fraction_non_alphanumeric': 0.20560359161955438, 'fraction_numerical': 0.016378450282673762, 'mean_word_length': 2.553618906942393, 'pattern_counts': {'":': 0, '<': 501, '<?xml version=': 0, '>': 501, 'https://': 4, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1811382', 'n_tokens_mistral': 4298, 'n_tokens_neox': 4171, 'n_words': 685}