<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Home</title><link>https://sourceforge.net/p/yamwi/wiki/Home/</link><description>Recent changes to Home</description><atom:link href="https://sourceforge.net/p/yamwi/wiki/Home/feed" rel="self"/><language>en</language><lastBuildDate>Mon, 11 Jun 2018 20:16:25 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/yamwi/wiki/Home/feed" rel="self" type="application/rss+xml"/><item><title>Discussion for Home page</title><link>https://sourceforge.net/p/yamwi/wiki/Home/?limit=25#4c77</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Nice software.  I had a problem with the tex binary mode . The bug is in line 337 of yamwi.php&lt;br/&gt;
    "\n\end{document}\n"  ;}&lt;br/&gt;
should read&lt;br/&gt;
    "\n\end{document}\n"  ;}&lt;/p&gt;
&lt;p&gt;As a comment, it is faster to use directly tex instead of latex.  I am including a modified yamwi.php&lt;/p&gt;
// A simple php-web interface for Maxima.&lt;br/&gt;
// Basically, it creates a file with user input&lt;br/&gt;
// and calls Maxima in batch mode.&lt;p&gt;&lt;/p&gt;
&lt;p&gt;///////////////////&lt;br/&gt;
// USER SETTINGS //&lt;br/&gt;
///////////////////&lt;/p&gt;
&lt;p&gt;$mode = 1; // 0 -&amp;gt; ASCII-Art output,&lt;br/&gt;
           // 1 -&amp;gt; Binary TeX output, &lt;br/&gt;
           // 2 -&amp;gt; Enhanced ASCII-Art output,&lt;br/&gt;
           // 3 -&amp;gt; Syntactic output&lt;br/&gt;
           // 4 -&amp;gt; Remote TeX + MathJax&lt;/p&gt;
&lt;p&gt;$max_file_time = 1;&lt;/p&gt;
&lt;p&gt;$max_process_time = 120;&lt;/p&gt;
&lt;p&gt;$max_num_processes = 30; &lt;/p&gt;
&lt;p&gt;//////////////&lt;br/&gt;
// MESSAGES //&lt;br/&gt;
//////////////&lt;/p&gt;
&lt;p&gt;$message_dangerous = "Yamwi detected forbidden code: ";&lt;br/&gt;
$message_time_process = "Requested process aborted. It exceeded maximum execution time.";&lt;br/&gt;
$message_too_many_processes = "Too many users. Please, try later.";&lt;br/&gt;
$message_prog_error = "Programming error detected. Check your input.";&lt;br/&gt;
$submit_button = "Clic";&lt;br/&gt;
$clear_button = "Clear";&lt;/p&gt;
&lt;p&gt;//////////////////////&lt;br/&gt;
// Global variables //&lt;br/&gt;
//////////////////////&lt;/p&gt;
&lt;p&gt;$key = $_GET&lt;span&gt;["c"]&lt;/span&gt;;&lt;br/&gt;
$nproc = $_GET&lt;span&gt;["n"]&lt;/span&gt;;&lt;br/&gt;
$input = trim($_POST&lt;span&gt;["max"]&lt;/span&gt;);&lt;br/&gt;
$apache_user_name = shell_exec('whoami');&lt;br/&gt;
$maxima_path = shell_exec('which maxima');&lt;/p&gt;
&lt;p&gt;$yamwi_path = getcwd();&lt;br/&gt;
$dangerous_words =&lt;br/&gt;
   array(':lisp',':lisp-quiet','to_lisp','to-maxima','system','eval_string',&lt;br/&gt;
         'compfile','compile','translate','translate_file','compile_file',&lt;br/&gt;
         'run_testsuite','bug_report','build_info','demo','appendfile',&lt;br/&gt;
         'batch','batch','closefile','filename_merge','file_search',&lt;br/&gt;
         'file_type','loadfile','save','stringout','with_stdout','writefile',&lt;br/&gt;
         'room','status','setup_autoload','opena','openr','openw','read_matrix',&lt;br/&gt;
         'read_lisp_array','read_maxima_array','read_hashed_array',&lt;br/&gt;
         'read_nested_list','read_list','write_data','entermatrix',&lt;br/&gt;
         'openplot_curves','xgraph_curves','plot2d_ps','psdraw_curve',&lt;br/&gt;
         'pscom','plot2d','plot3d','concat','sconcat','?');&lt;/p&gt;
&lt;p&gt;////////////////&lt;br/&gt;
// Debug info //&lt;br/&gt;
////////////////&lt;/p&gt;
&lt;p&gt;$show_info = false;&lt;br/&gt;
if ($show_info)&lt;br/&gt;
  echo '&lt;u&gt;Maximum time for files in tmp folder (min)&lt;/u&gt;:&lt;/p&gt;&lt;pre&gt;'.$max_file_time.'&lt;/pre&gt;&lt;br/&gt;'.&lt;br/&gt;
       '&lt;u&gt;Maximum time for running a process (sec)&lt;/u&gt;:&lt;pre&gt;'.$max_process_time.'&lt;/pre&gt;&lt;br/&gt;'.&lt;br/&gt;
       '&lt;u&gt;Maximum number of processes at a time&lt;/u&gt;: &lt;pre&gt;'.$max_num_processes .'&lt;/pre&gt;&lt;br/&gt;';&lt;p&gt;&lt;/p&gt;
&lt;p&gt;/////////////////////////&lt;br/&gt;
// Auxiliary functions //&lt;br/&gt;
/////////////////////////&lt;/p&gt;
&lt;p&gt;// create a key and store it in $key&lt;br/&gt;
function create_key() {&lt;br/&gt;
  global $key;&lt;br/&gt;
  $caracteres = "abcdefghijklmnopqrstuvwxyz0123456789";&lt;br/&gt;
  $i = 0;&lt;br/&gt;
  $cha = '' ;&lt;br/&gt;
  while ($i &amp;lt;= 20) {&lt;br/&gt;
    $num = rand() % 33;&lt;br/&gt;
    $tmp = substr($caracteres, $num, 1);&lt;br/&gt;
    $cha = $cha . $tmp;&lt;br/&gt;
    $i++;}&lt;br/&gt;
  $key = $cha;&lt;br/&gt;
  return $cha; }&lt;/p&gt;
&lt;p&gt;// removes old files&lt;br/&gt;
function remove_old_files () {&lt;br/&gt;
  global $max_file_time, $yamwi_path;&lt;br/&gt;
  shell_exec('find ' . $yamwi_path . '/tmp/* -amin +"' .&lt;br/&gt;
              $max_file_time . '" -type f -exec rm -f {} \;'); }&lt;/p&gt;
&lt;p&gt;//////////////////////&lt;br/&gt;
// Security section //&lt;br/&gt;
//////////////////////&lt;/p&gt;
&lt;p&gt;// check for dangerous code&lt;br/&gt;
function dangerous ($code) {&lt;br/&gt;
  global $dangerous_words;&lt;br/&gt;
  $alert = false;&lt;br/&gt;
  foreach ($dangerous_words as $word) {&lt;br/&gt;
    if (! strstr($code, $word) === false)  {&lt;br/&gt;
      $alert = $word;&lt;br/&gt;
      break; }}&lt;br/&gt;
  return $alert;}&lt;/p&gt;
&lt;p&gt;// checks if the number of Maxima processes opened by Yamwi exceeds $max_num_processes&lt;br/&gt;
function too_many_processes() {&lt;br/&gt;
  global $max_num_processes, $apache_user_name, $show_info;&lt;br/&gt;
  $cmd = 'ps -eo time,pid,user,pcpu,pmem,args ' .&lt;br/&gt;
         ' | grep ' . trim($apache_user_name) .&lt;br/&gt;
         ' | grep maxima | sort -rn';&lt;br/&gt;
  $out = shell_exec($cmd);&lt;br/&gt;
  $num = ceil((count(explode("\n", $out))-2)/2);&lt;br/&gt;
  if ($show_info)&lt;br/&gt;
    echo '&lt;u&gt;Current Yamwi activity&lt;/u&gt;: '.'&lt;/p&gt;&lt;pre&gt;'.$out.'&lt;/pre&gt;&lt;br/&gt;'.&lt;br/&gt;
         '&lt;u&gt;Current number of Maxima processes&lt;/u&gt;: &lt;pre&gt;'.$num .'&lt;/pre&gt;&lt;br/&gt;';&lt;br/&gt;
  if ($num &amp;gt; $max_num_processes)&lt;br/&gt;
    return true;&lt;br/&gt;
  else&lt;br/&gt;
    return false;}&lt;p&gt;&lt;/p&gt;
&lt;p&gt;////////////////////&lt;br/&gt;
// Output section //&lt;br/&gt;
////////////////////&lt;/p&gt;
&lt;p&gt;// separates individual sentences from Maxima script&lt;br/&gt;
function input_sentences ($val) {&lt;br/&gt;
  $anchor = 0;&lt;br/&gt;
  $sentence_counter = 0;&lt;br/&gt;
  $comment_level = 0;&lt;br/&gt;
  for($i = 0 ; $i &amp;lt; strlen($val) ; $i++) {&lt;br/&gt;
    if ($val&lt;span&gt;[$i]&lt;/span&gt; == "/" &amp;amp;&amp;amp; $val&lt;span&gt;[$i+1]&lt;/span&gt; == "&lt;em&gt;") &lt;br/&gt;
      $comment_level = $comment_level + 1;&lt;br/&gt;
    if ($val&lt;span&gt;&lt;span&gt;[$i]&lt;/span&gt;&lt;/span&gt; == "&lt;/em&gt;" &amp;amp;&amp;amp; $val&lt;span&gt;[$i+1]&lt;/span&gt; == "/") &lt;br/&gt;
      $comment_level = $comment_level - 1;&lt;br/&gt;
    if ($comment_level == 0 &amp;amp;&amp;amp;&lt;br/&gt;
        ($val&lt;span&gt;[$i]&lt;/span&gt; == ";" || $val&lt;span&gt;[$i]&lt;/span&gt; == "$")) {&lt;br/&gt;
      $sentences&lt;span&gt;[$sentence_counter]&lt;/span&gt;= substr($val, $anchor, $i - $anchor + 1);&lt;br/&gt;
      $sentence_counter = $sentence_counter + 1;&lt;br/&gt;
      $anchor = $i+1;} }&lt;br/&gt;
  return $sentences; }&lt;/p&gt;
&lt;p&gt;// Builds Maxima list of sentences&lt;br/&gt;
function list_of_sentences ($sentences) {&lt;br/&gt;
  global $mode;&lt;br/&gt;
  $sentence_counter = count($sentences);&lt;br/&gt;
  $lista = "";&lt;br/&gt;
  for($i = 1 ; $i &amp;lt; $sentence_counter ; $i++){&lt;br/&gt;
    $lista = $lista . &lt;br/&gt;
             "\"" .&lt;br/&gt;
             str_replace("\"", "\\"" , $sentences&lt;span&gt;[$i]&lt;/span&gt;) .&lt;br/&gt;
             "\"";&lt;br/&gt;
  if ($i &amp;lt; $sentence_counter-1)&lt;br/&gt;
    $lista = $lista.",\n";}&lt;br/&gt;
  if ($mode == 1 || $mode == 4)&lt;br/&gt;
    $lista = $sentences&lt;span&gt;[0]&lt;/span&gt;."\ntranslate_into_tex(&lt;span&gt;[".$lista."]&lt;/span&gt;)$";&lt;br/&gt;
  else&lt;br/&gt;
    $lista = $sentences&lt;span&gt;[0]&lt;/span&gt;."\ntranslate_into_print(&lt;span&gt;[".$lista."]&lt;/span&gt;)$";&lt;br/&gt;
  return $lista;}&lt;/p&gt;
&lt;p&gt;// returns the necessary code to add all&lt;br/&gt;
// the requested graphics when working in ASCII mode.&lt;br/&gt;
function graphics() {&lt;br/&gt;
   global $key, $nproc;&lt;br/&gt;
  $result = "";&lt;br/&gt;
  $file = 'tmp/' . $key . '.gr.' . $nproc . '.0.txt';&lt;br/&gt;
  if (file_exists($file)) {&lt;br/&gt;
    $fh = fopen($file, 'r');&lt;br/&gt;
    $theData = trim(fread($fh, filesize($file)));&lt;br/&gt;
    fclose($fh); &lt;br/&gt;
    $out = explode("\n", $theData);&lt;br/&gt;
    foreach ($out as $file_name)&lt;br/&gt;
      $result = $result .&lt;br/&gt;
                '&lt;img alt="gr" src="../%20.%20$file_name%20.%20"/&gt;&lt;br/&gt;'; }&lt;br/&gt;
  return $result; }&lt;/p&gt;
&lt;p&gt;function write_form() {&lt;br/&gt;
  global $key, $nproc, $input, $submit_button, $clear_button;&lt;br/&gt;
  echo '&amp;lt;form method="post" action="'. 
       $_SERVER&amp;amp;lt;span&amp;amp;gt;[" SCRIPT_NAME"]&amp;lt;="" span=""&amp;gt; .'?c=' . $key . '&amp;amp;n=' . $nproc. "\\"&amp;gt;\n".&lt;br/&gt;
       "&amp;lt;textarea name="\\"max\\"" rows="\\"10\\""&amp;gt;\n".&lt;br/&gt;
       $input.&lt;br/&gt;
       "&amp;lt;/textarea&amp;gt;&lt;br/&gt;\n".&lt;br/&gt;
       "&amp;lt;input type="\\"submit\\"" value="\\""." $submit_button.="" "\\"=""&amp;gt;\n".&lt;br/&gt;
       "&amp;lt;input type="\\"button\\"" value="\\""." $clear_button.="" "\\"="" onClick="\\"this.form.max.value='';" return="" false\\"=""&amp;gt;\n".&lt;br/&gt;
       "&amp;lt;/form&amp;gt;\n".&lt;br/&gt;
       "&lt;/p&gt;&lt;hr/&gt;\n\n" ; }&lt;p&gt;&lt;/p&gt;
&lt;p&gt;function write_results ($val) {&lt;br/&gt;
  echo $val;}&lt;/p&gt;
&lt;p&gt;function gtlt ($str) {&lt;br/&gt;
  return str_replace("&amp;gt;", "&amp;gt;", str_replace("&amp;lt;", "&amp;lt;", $str));}&lt;/p&gt;
&lt;p&gt;function prepare_ascii_output($out) {&lt;br/&gt;
  write_form();&lt;br/&gt;
  write_results('&lt;/p&gt;&lt;pre&gt;' .&lt;br/&gt;
                gtlt(substr($out, strpos($out, "(%i3)"))) .&lt;br/&gt;
                '&lt;/pre&gt;' .&lt;br/&gt;
                graphics());}&lt;p&gt;&lt;/p&gt;
&lt;p&gt;function prepare_enhanced_ascii_output($out, $sentences) {&lt;br/&gt;
  global $key, $nproc;&lt;br/&gt;
  $out_counter = 0;&lt;/p&gt;
&lt;p&gt;// read and clean Maxima output&lt;br/&gt;
  $subout = trim($out);&lt;br/&gt;
  $subout = substr($subout,31+strpos($subout,"start_maxima_output_print_code:"));&lt;/p&gt;
&lt;p&gt;// scan Maxima output&lt;br/&gt;
  while (strlen($subout) &amp;gt; 0) {&lt;br/&gt;
    $text_code_ini = strpos($subout,"%%%");&lt;br/&gt;
    $print_code&lt;span&gt;[$out_counter]&lt;/span&gt; = substr($subout,0,$text_code_ini);&lt;br/&gt;
    if ($print_code&lt;span&gt;[$out_counter]&lt;/span&gt; != '')&lt;br/&gt;
      $print_code&lt;span&gt;[$out_counter]&lt;/span&gt; = '&lt;/p&gt;&lt;pre class="print"&gt;' . gtlt($print_code&lt;span&gt;[$out_counter]&lt;/span&gt;) . '&lt;/pre&gt;';&lt;br/&gt;
    $image_code&lt;span&gt;[$out_counter]&lt;/span&gt; = search_images($out_counter);&lt;br/&gt;
    $text_code_end = strpos(substr($subout,$text_code_ini+3),"%%%");&lt;br/&gt;
    $text_code&lt;span&gt;[$out_counter]&lt;/span&gt; = trim(substr($subout, $text_code_ini, $text_code_end+6), "%");&lt;br/&gt;
    $subout = substr($subout, $text_code_ini+$text_code_end+6);&lt;br/&gt;
    $out_counter = $out_counter + 1; }&lt;p&gt;&lt;/p&gt;
&lt;p&gt;// write html code&lt;br/&gt;
  write_form();&lt;br/&gt;
  $result = "\n";&lt;br/&gt;
  for($i = 1 ; $i &amp;lt;= $out_counter ; $i++) {&lt;br/&gt;
    $this_result1 = '';  // the output label&lt;br/&gt;
    $this_result2 = '';  // the mathematical result&lt;br/&gt;
    if (substr($sentences&lt;span&gt;[$i]&lt;/span&gt;, -1) === ";") {&lt;br/&gt;
      $this_result1 = '(%o' . $i . ')';&lt;br/&gt;
      $this_result2 = '&lt;/p&gt;&lt;pre class="output"&gt;' . $text_code&lt;span&gt;[$i-1]&lt;/span&gt; . '&lt;/pre&gt;'; }&lt;br/&gt;
    $result = $result .&lt;br/&gt;
              '' .&lt;br/&gt;
              '\n" .&lt;br/&gt;
              '\n" .&lt;br/&gt;
              "\n" .&lt;br/&gt;
              '' .&lt;br/&gt;
              '\n" .&lt;br/&gt;
              '\n" .&lt;br/&gt;
              "\n";}&lt;br/&gt;
  $result = $result . "&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre class="input"&gt;' . '(%i' . $i . ')' . "&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre class="input"&gt;' . trim($sentences&lt;span&gt;[$i]&lt;/span&gt;) . "&lt;/pre&gt;\n".&lt;br/&gt;
              $print_code&lt;span&gt;[$i-1]&lt;/span&gt; .&lt;br/&gt;
              "&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;pre class="output"&gt;' . $this_result1 . "&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;' . $image_code&lt;span&gt;[$i-1]&lt;/span&gt; . $this_result2 . "&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;\n\n";&lt;br/&gt;
  write_results($result); }&lt;p&gt;&lt;/p&gt;
&lt;p&gt;// search for images returned by sentence number $sn&lt;br/&gt;
// and write the corresponding html code&lt;br/&gt;
function search_images ($sn) {&lt;br/&gt;
  global $key, $nproc;&lt;br/&gt;
  $result = "";&lt;br/&gt;
  $sen = $sn + 1;&lt;br/&gt;
  $file = 'tmp/' . $key . '.gr.' . $nproc .  '.' . $sen . '.txt';&lt;br/&gt;
  if (file_exists($file)) {&lt;br/&gt;
    $fh = fopen($file, 'r');&lt;br/&gt;
    $theData = trim(fread($fh, filesize($file)));&lt;br/&gt;
    fclose($fh); &lt;br/&gt;
    $out = explode("\n", $theData);&lt;br/&gt;
    foreach ($out as $file_name) {}&lt;br/&gt;
      while (! file_exists($file_name)) {};&lt;br/&gt;
      $result = $result . '&lt;img alt="gr" src="../'%20.%20$file_name%20.'"/&gt;&lt;br/&gt;';}&lt;br/&gt;
  return $result; }&lt;/p&gt;
&lt;p&gt;function tex_template ($tex) {&lt;br/&gt;
  return "\def\folio{} " .&lt;br/&gt;
         $tex .&lt;br/&gt;
         " \eject\end\n" ;}&lt;/p&gt;
&lt;p&gt;function prepare_tex_output($out, $sentences) {&lt;br/&gt;
  global $key, $nproc, $yamwi_path, $mode;&lt;br/&gt;
  $out_counter = 0;&lt;/p&gt;
&lt;p&gt;// read and clean Maxima output&lt;br/&gt;
  $subout = trim($out);&lt;br/&gt;
  $subout = substr($subout,31+strpos($subout,"start_maxima_output_tex_code:"));&lt;br/&gt;
  $subout=str_replace("\begin{verbatim}", "$$", str_replace("\end{verbatim}", "$$", $subout));&lt;/p&gt;
&lt;p&gt;// scan Maxima output&lt;br/&gt;
  while (strlen($subout) &amp;gt; 0) {&lt;br/&gt;
    $tex_code_ini = strpos($subout,"$$");&lt;br/&gt;
    $print_code&lt;span&gt;[$out_counter]&lt;/span&gt; = substr($subout,0,$tex_code_ini);&lt;br/&gt;
    if ($print_code&lt;span&gt;[$out_counter]&lt;/span&gt; != '')&lt;br/&gt;
      $print_code&lt;span&gt;[$out_counter]&lt;/span&gt; = '&lt;/p&gt;&lt;pre class="print"&gt;' .&lt;br/&gt;
                                  gtlt($print_code&lt;span&gt;[$out_counter]&lt;/span&gt;) .&lt;br/&gt;
                                  '&lt;/pre&gt;';&lt;br/&gt;
    $image_code&lt;span&gt;[$out_counter]&lt;/span&gt; = search_images($out_counter);&lt;br/&gt;
    $tex_code_end = strpos(substr($subout,$tex_code_ini+2),"$$");&lt;br/&gt;
    $tex_code&lt;span&gt;[$out_counter]&lt;/span&gt; = substr($subout, $tex_code_ini, $tex_code_end+4);&lt;br/&gt;
    $subout = substr($subout, $tex_code_ini+$tex_code_end+4);&lt;br/&gt;
    $out_counter = $out_counter + 1; }&lt;p&gt;&lt;/p&gt;
&lt;p&gt;if ($mode == 1) {&lt;br/&gt;
    // save LaTex files&lt;br/&gt;
    for($i = 1 ; $i &amp;lt;= $out_counter ; $i++){&lt;br/&gt;
      if (substr($sentences&lt;span&gt;[$i]&lt;/span&gt;, -1) === ";") {&lt;br/&gt;
        // write latex file&lt;br/&gt;
        $fich = fopen($yamwi_path . '/tmp/' . $key . '.tex', 'w');&lt;br/&gt;
        fwrite($fich, tex_template($tex_code&lt;span&gt;[$i-1]&lt;/span&gt;));&lt;br/&gt;
        fclose($fich);&lt;br/&gt;
        // compile latex source&lt;br/&gt;
        shell_exec(&lt;br/&gt;
          'cd ' . $yamwi_path . '/tmp/' . ';' .&lt;br/&gt;
          'tex ' . $key . '.tex ;' . &lt;br/&gt;
          'dvipng -D 150 -T tight ' . $key . '.dvi -o '.$key.'.'.$nproc.'.'.$i.'.png'); } }}&lt;/p&gt;
&lt;p&gt;// write html code&lt;br/&gt;
  if ($mode == 4) {&lt;br/&gt;
    $result = '&amp;lt;script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"&amp;gt;&amp;lt;/script&amp;gt;' . "\n\n";}&lt;br/&gt;
  else {&lt;br/&gt;
    $result = '';}&lt;br/&gt;
  write_form();&lt;br/&gt;
  $result = $result . "\n";&lt;br/&gt;
  for($i = 1 ; $i &amp;lt;= $out_counter ; $i++) {&lt;br/&gt;
    $this_result1 = '';  // the output label&lt;br/&gt;
    $this_result2 = '';  // the mathematical result&lt;br/&gt;
    if (substr($sentences&lt;span&gt;[$i]&lt;/span&gt;, -1) === ";") {&lt;br/&gt;
      $this_result1 = '(%o' . $i . ')';&lt;br/&gt;
      if ($mode == 1) {&lt;br/&gt;
        $this_result2 = '&lt;img alt="eq" src="."/&gt;';}&lt;br/&gt;
      else {&lt;br/&gt;
        $this_result2 = '(' . trim($tex_code&lt;span&gt;[$i-1]&lt;/span&gt;,"$") . ')';} }&lt;br/&gt;
    $result = $result .&lt;br/&gt;
              '' .&lt;br/&gt;
              '\n" .&lt;br/&gt;
              '\n" .&lt;br/&gt;
              "\n" .&lt;br/&gt;
              '' .&lt;br/&gt;
              '\n" .&lt;br/&gt;
              '\n" .&lt;br/&gt;
              "\n"; }&lt;br/&gt;
  $result = $result . "&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br/&gt;&lt;pre class="input"&gt;' . '(%i' . $i . ')' . "&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;br/&gt;&lt;pre class="input"&gt;' . trim($sentences&lt;span&gt;[$i]&lt;/span&gt;) . "&lt;/pre&gt;\n" .&lt;br/&gt;
              $print_code&lt;span&gt;[$i-1]&lt;/span&gt; .&lt;br/&gt;
              "&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;' . $this_result1 . "&lt;/td&gt;&lt;td&gt;' . $image_code&lt;span&gt;[$i-1]&lt;/span&gt; . $this_result2 . "&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;\n\n";&lt;br/&gt;
  write_results($result); }&lt;/p&gt;
&lt;p&gt;// returns an alert message if something was wrong&lt;br/&gt;
function alert ($message) {&lt;br/&gt;
  write_results('&lt;/p&gt;&lt;p class="error"&gt;' . $message . '&lt;/p&gt;');}&lt;p&gt;&lt;/p&gt;
&lt;p&gt;function error_detected ($out) {&lt;br/&gt;
  global $message_prog_error;&lt;br/&gt;
  $yamwi1a_pos = strpos($out, "yamwi1a");&lt;br/&gt;
  if (! $yamwi1a_pos === false)&lt;br/&gt;
    return "Not enough information on some of: " . &lt;br/&gt;
           substr($out,&lt;br/&gt;
                  $yamwi1a_pos + 7,&lt;br/&gt;
                  strpos($out, "yamwi1b") - $yamwi1a_pos - 7) .&lt;br/&gt;
           ".&lt;br/&gt;You may try 'assume'." ;&lt;br/&gt;
  elseif (! strpos($out, "Maxima encountered a Lisp error:") === false ||&lt;br/&gt;
          ! strpos($out, "incorrect syntax:") === false ||&lt;br/&gt;
          ! strpos($out, "-- an error. To debug this try: debugmode(true);") === false)&lt;br/&gt;
    return $message_prog_error;&lt;br/&gt;
  else&lt;br/&gt;
    return false;}&lt;/p&gt;
&lt;p&gt;function pre_process ($str) {&lt;br/&gt;
   $tmp = str_replace("\", "" , $str);&lt;br/&gt;
   $tmp = str_replace(array("wxdraw3d", "draw3d"), "Draw3d", $tmp);&lt;br/&gt;
   $tmp = str_replace(array("wxdraw2d", "draw2d"), "Draw2d", $tmp);&lt;br/&gt;
   $tmp = str_replace(array("wxdraw", "draw"), "Draw", $tmp);&lt;br/&gt;
   return $tmp;}&lt;/p&gt;
&lt;p&gt;// run Maxima and output results&lt;br/&gt;
function calculate () {&lt;br/&gt;
  global $key, $nproc, $input, $max_process_time, $message_time_process, $show_info,&lt;br/&gt;
         $mode, $yamwi_path;&lt;br/&gt;
  $nproc = $nproc + 1;&lt;br/&gt;
  $display2d = "";&lt;br/&gt;
  if ($mode == 3) $display2d = "display2d: false,";&lt;/p&gt;
&lt;p&gt;// build Maxima program&lt;br/&gt;
  $val = '(maxima_tempdir: "'.$yamwi_path.'/tmp",' .&lt;br/&gt;
         '%codigo_usuario%: "'.$key.'",' .&lt;br/&gt;
         '%num_proceso%: "'.$nproc.'",' .&lt;br/&gt;
         '%dir_sources%: "'.$yamwi_path.'/packages",' .&lt;br/&gt;
         'load("'.$yamwi_path.'/yamwi.mac"),' .&lt;br/&gt;
         'load("'.$yamwi_path.'/yamwi.lisp"),' .&lt;br/&gt;
         $display2d .&lt;br/&gt;
         "\"%%%\")\$\n" . &lt;br/&gt;
         $input;&lt;br/&gt;
  $val = pre_process ($val);&lt;/p&gt;
&lt;p&gt;// in TeX or enhanced ASCII mode, isolate sentences.&lt;br/&gt;
  if ($mode == 1 || $mode == 2 || $mode == 3 || $mode == 4) {&lt;br/&gt;
    // 1. make array of input sentences&lt;br/&gt;
    $sentences = input_sentences($val);&lt;br/&gt;
    // 2. build the Maxima list with sentences as strings&lt;br/&gt;
    $val = list_of_sentences($sentences); }&lt;/p&gt;
&lt;p&gt;// create batch file&lt;br/&gt;
  $fich = fopen($yamwi_path.'/tmp/'.$key.'.mac', 'w');&lt;br/&gt;
  fwrite($fich, $val);&lt;br/&gt;
  fclose($fich);&lt;/p&gt;
&lt;p&gt;// call Maxima in batch mode&lt;br/&gt;
  $out = shell_exec('timelimit -t '. &lt;br/&gt;
                    $max_process_time .&lt;br/&gt;
                    ' -T 5 maxima -b "'.$yamwi_path.'/tmp/'.$key.'.mac"');&lt;br/&gt;
  if ($show_info){&lt;br/&gt;
    echo '&lt;u&gt;Complete Maxima input&lt;/u&gt;: '.'&lt;/p&gt;&lt;pre&gt;'.$val.'&lt;/pre&gt;&lt;br/&gt;';&lt;br/&gt;
    echo '&lt;u&gt;Complete Maxima output&lt;/u&gt;: '.'&lt;pre&gt;'.$out.'&lt;/pre&gt;&lt;br/&gt;';}&lt;p&gt;&lt;/p&gt;
&lt;p&gt;// if process did not exceed maximum execution time&lt;br/&gt;
  // generate html output.&lt;br/&gt;
  if (strstr($out, 'Exiting on signal') === false) {&lt;br/&gt;
    $out = substr($out,strpos($out, "%%%") + 4);&lt;br/&gt;
    $out = rtrim(str_replace($yamwi_path.'/tmp/'.$key.'.mac','', $out));&lt;br/&gt;
    $out = substr($out,0, strlen($out) - strlen(strrchr($out,"%")) - 1);&lt;br/&gt;
    $input = str_replace("\", "" , $input);&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;// write results
$an_error = error_detected($out);
if (! $an_error === false) {
  write_form();
  alert ($an_error);}
elseif ($mode == 0)  // ASCII mode
  prepare_ascii_output($out);
elseif ($mode == 1 || $mode == 4) // TeX or MathJax mode
  prepare_tex_output($out, $sentences);
else  // Enhanced ASCII and syntactic modes
  prepare_enhanced_ascii_output($out, $sentences);

// cleaning old files
remove_old_files ();}
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;else {&lt;br/&gt;
    write_form();&lt;br/&gt;
    alert($message_time_process); }}&lt;/p&gt;
&lt;p&gt;//////////////////&lt;br/&gt;
// Main program //&lt;br/&gt;
//////////////////&lt;/p&gt;
&lt;p&gt;function start ($initial_code) {&lt;br/&gt;
  global $key, $nproc, $input, $message_dangerous, $message_too_many_processes;&lt;br/&gt;
  $danger = dangerous($input);&lt;br/&gt;
  if ($key == "") {&lt;br/&gt;
    $nproc = 0;&lt;br/&gt;
    $input = $initial_code;&lt;br/&gt;
    create_key();&lt;br/&gt;
    write_form(); } &lt;br/&gt;
  elseif ($danger) {&lt;br/&gt;
    write_form();&lt;br/&gt;
    alert($message_dangerous . $danger );}&lt;br/&gt;
  elseif (too_many_processes()) {&lt;br/&gt;
    write_form();&lt;br/&gt;
    alert($message_too_many_processes);}&lt;br/&gt;
  else&lt;br/&gt;
    calculate();}&lt;/p&gt;
&lt;p&gt;?&amp;gt;&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Luis Alejandro Marquez Martinez</dc:creator><pubDate>Mon, 11 Jun 2018 20:16:25 -0000</pubDate><guid>https://sourceforge.neta11737a850d12be5e009abebd85bf03870608c87</guid></item><item><title>WikiPage Home modified by Mario Rodriguez Riotorto</title><link>https://sourceforge.net/p/yamwi/wiki/Home/</link><description>Welcome to your wiki!

This is the default page, edit it as you see fit. To add a new page simply reference it within brackets, e.g.: [SamplePage].

The wiki uses [Markdown](/p/yamwi/wiki/markdown_syntax/) syntax.

[[project_admins]]
[[download_button]]
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Mario Rodriguez Riotorto</dc:creator><pubDate>Sat, 15 Sep 2012 09:13:42 -0000</pubDate><guid>https://sourceforge.netd2c701ffec4154654d468f418b48f5ac51cc3ce5</guid></item></channel></rss>