<?php
// bubble_sort_c.php
// Uses and compiles a user modified bubble_sort.c ... thanks to https://www.w3schools.com/dsa/trydsa.php?filename=demo_bubblesort

  $sorttype="bubble_sort";
  $selsorttype="bubble_sort";
  
  $inprintf="youllneverfindthis";
  $outprintf="youllneverfindthis";
  
  $ccont="";
  $lastresult="";
  $lresult="";

  if (isset($_POST['mysort'])) {
    $sorttype=str_replace('+',' ',urldecode($_POST['mysort']));
    $ccont=file_get_contents('./' . $sorttype . '.c');
  } else if (isset($_GET['mysort'])) {
    $sorttype=str_replace('+',' ',urldecode($_GET['mysort']));
    $ccont=file_get_contents('./' . $sorttype . '.c');
  } else {
    $ccont=file_get_contents('./bubble_sort.c');
  }
  
  foreach (glob('*_sort.c') as $filename) {
    if (strpos(basename($filename), 'new_') === false) {
    if ($selsorttype == "bubble_sort") {
       $selsorttype="<select onchange=\"location.href='./bubble_sort_c.php?mysort=' + this.value + ('#' + ('' + document.getElementById('myform').action + '#').split('#')[1].replace(/^\#/g,'').replace(/^null/g,'').replace(/^undefined/g,'')).replace(/^\#$/g,'');\" style=display:inline-block; name=\"mysort\" id=\"mysort\"><option value='" . explode('.',basename($filename))[0] . "'>" . explode('.',basename($filename))[0] . "</option></select>";
    } else if (basename($filename) == ($sorttype . ".c")) {
       $selsorttype=str_replace(" id=\"mysort\">", " id=\"mysort\">" . "<option value='" . explode('.',basename($filename))[0] . "'>" . explode('.',basename($filename))[0] . "</option>", $selsorttype);
    } else {
       $selsorttype=str_replace("</select>", "<option value='" . explode('.',basename($filename))[0] . "'>" . explode('.',basename($filename))[0] . "</option></select>", $selsorttype);
    }
    }
  }

  $prefix=explode(' = {', $ccont)[0] . ' = {';
  $midbit=explode('"',explode("'",explode('}', explode($prefix, $ccont)[1])[0])[0])[0];
  $suffix=explode($prefix . $midbit, $ccont)[1];
  if (strpos($suffix, 'printf("') !== false) {
    $inprintf='"' . explode('"', explode('printf("', $suffix)[1])[0] . '"';
    $outprintf='"' . "</span><span style=cursor:pointer;background-color:lightgreen; title=\"Tailorable output\" id=mycespan contenteditable=true onblur=\" document.getElementById('myform').action=document.getElementById('myform').action.split('#')[0] + '#' + encodeURIComponent(this.innerHTML); \">" . str_replace('"','',$inprintf) . "</span><span id=zsuffix>" . '"';
  }
  
  $altmidbit=$midbit;

  $httpis=" http";
  $endaf="youllveverfindthis";
  $endat="youllveverfindthis";
  $hbits=explode(' http', $prefix);
  if (sizeof($hbits) > 1) {
    $endaf=' http' . explode(' ', $hbits[1])[0];
    $endat=' http' . explode(' ', $hbits[1])[0] . '</a>';
    $httpis=$endaf;
  }
  
  if (isset($_POST['myarr'])) {
     $altmidbit=str_replace('   ',' + ',str_replace('+',' ',urldecode($_POST['myarr'])));
     file_put_contents('new_' . $sorttype . '.c', $prefix . explode('"',explode("'",$altmidbit)[0])[0] . $suffix);
     //exit;
     exec('gcc new_' . $sorttype . '.c -o ' . $sorttype);
     $lastresult='$ gcc new_' . $sorttype . '.c -o ' . $sorttype . ' <br>$ ./' . $sorttype . '<br><span id=myresult>';
     $lresult.=shell_exec('./' . $sorttype);
     if (strpos($lresult, ':') !== false) {
       $lastresult.=explode(':', $lresult)[0] . ':</span>' . explode(explode(':',$lresult)[0] . ':', $lresult)[1];
     } else if (strpos($lresult,' -') !== false || strpos($lresult,'0') !== false || strpos($lresult,'1') !== false || strpos($lresult,'2') !== false || strpos($lresult,'3') !== false || strpos($lresult,'4') !== false || strpos($lresult,'5') !== false || strpos($lresult,'6') !== false || strpos($lresult,'7') !== false || strpos($lresult,'8') !== false || strpos($lresult,'9') !== false) {
       $lr=explode('9', explode('8', explode('7', explode('6', explode('5', explode('4', explode('3', explode('2', explode('1', explode('0', explode(' -', $lresult)[0] )[0] )[0] )[0] )[0] )[0] )[0] )[0] )[0] )[0] )[0];
       $lastresult.=$lr . '</span>' . explode($lr, $lresult)[1];

     } else {
       $lastresult.=$lresult . '</span>';
     }
     $midbit=$altmidbit;
  } else if (isset($_GET['myarr'])) {
     $altmidbit=str_replace('   ',' + ',str_replace('+',' ',urldecode($_GET['myarr'])));
     file_put_contents('new_' . $sorttype . '.c', $prefix . explode('"',explode("'",$altmidbit)[0])[0] . $suffix);
     exec('gcc new_' . $sorttype . '.c -o ' . $sorttype);
     $lastresult='$ gcc new_' . $sorttype . '.c -o ' . $sorttype . ' <br>$ ./' . $sorttype . '<br><span id=myresult>';
     $lresult.=shell_exec('./' . $sorttype);
     if (strpos($lresult, ':') !== false) {
       $lastresult.=explode(':', $lresult)[0] . ':</span>' . explode(explode(':',$lresult)[0] . ':', $lresult)[1];
     } else if (strpos($lresult,' -') !== false || strpos($lresult,'0') !== false || strpos($lresult,'1') !== false || strpos($lresult,'2') !== false || strpos($lresult,'3') !== false || strpos($lresult,'4') !== false || strpos($lresult,'5') !== false || strpos($lresult,'6') !== false || strpos($lresult,'7') !== false || strpos($lresult,'8') !== false || strpos($lresult,'9') !== false) {
       $lr=explode('9', explode('8', explode('7', explode('6', explode('5', explode('4', explode('3', explode('2', explode('1', explode('0', explode(' -', $lresult)[0] )[0] )[0] )[0] )[0] )[0] )[0] )[0] )[0] )[0] )[0];
       $lastresult.=$lr . '</span>' . explode($lr, $lresult)[1];

     } else {
       $lastresult.=$lresult . '</span>';
     }
     $midbit=$altmidbit;
  }
  
  echo "<html>
<head>
<title>Numerical Sort Recompiles bubble_sort.c - RJM Programming - November, 2024 ... thanks to https://www.w3schools.com/dsa/trydsa.php?filename=demo_bubblesort</title>
<scr" . "ipt type=text/javascript>
  var retval=false;
</scr" . "ipt>
</head>
<body onload=\"if (document.getElementById('myresult')) { document.getElementById('myresult').innerHTML=( (  ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'') == '') ? document.getElementById('myresult').innerHTML : decodeURIComponent(('' + location.hash).replace(/^\#/g,''))); } if (document.getElementById('mycespan')) { document.getElementById('mycespan').innerHTML=( (  ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'') == '') ? document.getElementById('mycespan').innerHTML : decodeURIComponent(('' + location.hash).replace(/^\#/g,'')));    document.getElementById('myform').action=document.getElementById('myform').action.split('#')[0] + '#' + encodeURIComponent(document.getElementById('mycespan').innerHTML); } setTimeout(function(){ document.getElementById('myarr').focus(); }, 3000);\">
<form id=myform onsubmit='return retval;' method=POST action=./bubble_sort_c.php>
<h1>Numerical Sort Recompiles " . $selsorttype . ".c</h1>
<h3>RJM Programming - November, 2024</h3>
<table style=width:99%;>
<tr><td style=background-color:lightblue;>
<span id=sprefix>" . str_replace($httpis," Thanks to <a onclick=\"window.open(this.innerHTML,'_blank','top=100,left=100,width=700,height=700');\" style=cursor:pointer;text-decoration:underline;>" . trim($httpis), str_replace($endaf, $endat, str_replace("\n", "<br>", str_replace('>','&gt;',str_replace('<','&lt;',$prefix))))) . "</span><textarea onkeydown='retval=true;' onblur=\"document.getElementById('mysub').click();\" name=myarr id=myarr style=display:inline-block;background-color:pink; rows=1 cols=" . (2 + strlen($midbit)) . " value=\"" . $midbit . "\">" . $midbit . "</textarea><span id=ssuffix>" . str_replace($inprintf,$outprintf,str_replace("\n", "<br>", str_replace('>','&gt;',str_replace('<','&lt;',$suffix)))) . "</span>
<input type=submit id=mysub value=Submit style=display:none;></input>
</td><td style=vertical-align:top;><div id=result style=background-color:yellow;>" . $lastresult . "</div><br></tr></table>
</form>
</body>
</html>";

?>
