#!/usr/bin/perl use CGI qw(:standard); $DEFAULTGRADELEVEL = 9; open(KINFO, "kinfo.dat") || bail(); if (!$bail) { @kanji = (); close (KINFO); unshift (@kanji, 0); srand; $grade = param("g"); $total = param("t"); $correct = param("c"); $number = param("n"); $all = param("a"); if ($grade == "" || $grade < 1 || grade > 9) { $grade = $DEFAULTGRADELEVEL; } if ($total == "" || $correct > $total || $correct == "" || $all == "") { $total = 0; $correct = 0; $number = 1; $all = 0; } if ($total < 0 || $correct < 0) { $grade = $DEFAULTGRADELEVEL; $total = 0; $correct = 0; $number = 1; $all = 0; } $base = 0; for ($i=0; $i < $grade; $i++) { $base += $kanji[$i]; } $k = $base + rand($kanji[$grade]) + 11; $grade = substr($kanji[$k], 4, 1); $frequency = substr($kanji[$k], 7, 4); $kanji = substr($kanji[$k], 12, 3); $readings = substr($kanji[$k], 16, index(substr($kanji[$k], 16), " {")); $meanings = substr($kanji[$k], index($kanji[$k], " {")); print "Content-Type: text/html; charset=UTF-8\n\n"; print ""; print "Kanji Flash"; print "
"; print "

$kanji

$readings

$meanings


"; $all += $grade; $gradeUp = $grade + 1; $gradeDown = $grade - 1; if ($gradeUp > 9) { $gradeUp = 9; } if ($gradeDown < 1) { $gradeDown = 1; } if ($number < 3) { print "I know it!"; } else { print "I know it!"; } print "          "; print "I don't know it."; if ($total > 0) { print "

You have known
$correct out of $total
"; print "which is " . int($correct / $total * 100) . "%
"; if ($total > 9) { print "Your approximate Kanji level is:
" . int(($grade + ($all / $total)) / 2); } print "
"; } if ($total != 0) { print "

Clear Score"; } else { print "

Scoring will not begin until the first character which you can recognize."; } print "
\n\n"; } sub bail { $bail="1"; print "Content-Type: text/html;\n\nKanji Flash
"; print "

Error opening data file

"; print "
\n\n"; }