#! /opt/bin/dash
#
# os/cgi/scheduler - generate scheduler.py problem based on userid

export PATH="/opt/bin:/bin:/usr/bin"

q="4"; j="5"; m="15"; s="916444529"

h="SJF"; REMOTE_USER="guest" # public version

case "$h" in
   RR) p="RR";;
  SJF) p="SJF";;
    *) p="FIFO";;
esac

# optional user-defined seed and ans arguments
useed=$(echo "$2" | tr -dc '[:digit:]')
ans="$3"

echo "Content-type: text/html\n\n<html><head><title>scheduler</title></head><body>
<form method=POST action=\"/cgi/scheduler-public-post\">
<input type=hidden name=P value=$p>"
user=$(echo "${REMOTE_USER}" | tr -dc '[:alnum:]' | tr '[:upper:]' '[:lower:]')
if [ -z "$user" ]; then echo "Bad user: ${REMOTE_USER} -&gt; $user"; exit 1; fi
if [ -n "$HTTP_HOST" ]; then cd /os/prog/scheduler || exit 1; fi

if [ -n "$useed" ]; then
  echo "<input type=hidden name=useed value=$useed>"
  seed="$useed"
  msg="- seed = $seed"
else
  x=$(perl -e "print unpack(\"C*\",$user);"); seed="${s}${x}"
  #echo "<pre>s = $s, x = $x, seed = $seed</pre>"
  msg=""
fi

echo "<b>$user</b> - scheduler $msg<p>"

RR=""; if [ "$p" = "RR" ]; then RR="\nLength of time slice for RR policy = $q\n"; fi

echo "Policy <b>$p</b><pre>"
python3 ./scheduler.py -s "$seed" -q "$q" -j "$j" -m "$m" -p "$p" |
 sed -e '/^$/d' -e '/^ARG/d' -e '/^Compute/,$d'
echo "${RR}\nShow the <b>$p</b> scheduling execution trace:</pre>"

# optionally display answers if useed and "ans" arguments are present
if [ -n "$useed" -a -n "$ans" ]; then
  echo "<pre>"
  python3 ./scheduler.py -s "$seed" -q "$q" -j "$j" -m "$m" -p "$p" -c | grep '^  \[ time'
  echo "</pre>"
fi

n=$(python3 ./scheduler.py -s "$seed" -q "$q" -j "$j" -m "$m" -p "$p" -c | grep '^  \[ time' | wc -l)
#echo "n = $n"
awk -v p="$p" -v n="$n" 'END { style="style=\"font-family: inherit; font-size: inherit;\"";
 print "<table border=1><tr><th align=left>Time</th><th align=left>Job #</th>\
 <th align=left>Run Time</th></tr>";
 for( i=1; i<=n; ++i) {
  print "<tr><td align=center><input type=text size=4 "style" name=T"i"T></td>\
   <td align=center><input type=text size=4 "style" name=j"i"j></td>\
   <td align=center><input type=text size=4 "style" name=r"i"r></td></tr>";
 }
 print "</table>";
}' < /dev/null
echo "<p><input type=submit value=Submit></form></body></html>"
