+function is_trump($c) { return (($c<27) ? 1:0);}
+function is_club($c) { return (in_array($c,array('27','28','29','30','31','32','33','34')));}
+function is_spade($c) { return (in_array($c,array('35','36','37','38','39','40','41','42')));}
+function is_heart($c) { return (in_array($c,array('43','44','45','46','47','48')));}
+
+function compare_cards($a,$b)
+{
+ /* if a is higher than b return 1, else 0, a being the card first played */
+
+ /* first map all cards to the odd number */
+ if( $a/2 - (int)($a/2) != 0.5)
+ $a--;
+ if( $b/2 - (int)($b/2) != 0.5)
+ $b--;
+
+ if(is_trump($a) && $a<=$b)
+ return 1;
+ else if(is_trump($a) && $a>$b)
+ return 0;
+ else
+ { /*$a is not a trump */
+ if(is_trump($b))
+ return 0;
+ else
+ {
+ /* both clubs? */
+ if( is_club($a) && is_club($b))
+ if($a<=$b)
+ return 1;
+ else
+ return 0;
+ /* both spade? */
+ if( is_spade($a) && is_spade($b))
+ if($a<=$b)
+ return 1;
+ else
+ return 0;
+ /* both heart? */
+ if( is_heart($a) && is_heart($b))
+ if($a<=$b)
+ return 1;
+ else
+ return 0;
+ return 1;
+ }
+ }
+
+}
+
+function get_winner($p)
+{
+ /* get all 4 cards played in a trick */
+ $c1 = $p[0];
+ $c2 = $p[1];
+ $c3 = $p[2];
+ $c4 = $p[3];
+
+ /* find out who won */
+ if( compare_cards($c1,$c2) && compare_cards($c1,$c3) && compare_cards($c1,$c4) )
+ return 0;
+ if( compare_cards($c2,$c3) && compare_cards($c2,$c4) )
+ return 1;
+ if( compare_cards($c3,$c4) )
+ return 2;
+ return 3;
+}
+
+function parse_status()
+{
+ global $game,$history,$player,$hash,$lines;
+
+ $game["init"] = 0;
+ $game["solo-who"] = -1;
+ $game["solo-what"] = "todo";
+ $game["wedding"] = -1;
+ $game["poverty"] = "";
+ $game["nines"] = -1;
+ $game["startplayer"] = 0;
+
+ for($i=0;$i<4;$i++)
+ {
+ $tmp = explode( ":",$lines[$i]);
+ $hash[$i] = $tmp[0];
+ $player[$tmp[0]]["number"] = $i;
+ $player[$tmp[0]]["hash"] = $tmp[0];
+ $player[$tmp[0]]["name"] = $tmp[1];
+ $player[$tmp[0]]["email"] = $tmp[2];
+ $player[$tmp[0]]["option"] = $tmp[3];
+ $player[$tmp[0]]["points"] = $tmp[4];
+ $player[$tmp[0]]["cards"] = $tmp[5];
+ if(ereg("s",$tmp[3])) $game["init"]++; /* how many players are ready? */
+ if(ereg("P",$tmp[3])) $game["poverty"].= $i; /* players with poverty, could be two, so use a string */
+ if(ereg("N",$tmp[3])) $game["nines"] = $i; /* the player with too many nines, only one possible */
+ if(ereg("W",$tmp[3])) $game["wedding"] = $i; /* the player with the wedding, also only one possible */
+ if(ereg("([OSQJCAH])",$tmp[3],$match) && ($game["solo-who"]<0) )
+ {
+ $game["solo-who"] = $i;
+ $game["startplayer"] = $i;
+ switch($match[1])
+ {
+ case "O":
+ $game["solo-what"] = "No Trump";
+ case "S":
+ $game["solo-what"] = "Trump";
+ case "Q":
+ $game["solo-what"] = "Queen";
+ case "J":
+ $game["solo-what"] = "Jack";
+ case "C":
+ $game["solo-what"] = "Club";
+ case "A":
+ $game["solo-what"] = "Spade";
+ case "H":
+ $game["solo-what"] = "Heart";
+ }
+ }
+
+ }
+ /* save the game history */
+ for($i=4;$i<sizeof($lines);$i++)
+ if(!ereg("^[[:space:]]*$",trim($lines[$i])))
+ $history[] = $lines[$i];
+
+ if(sizeof($history)==0 || (sizeof($history)==1 && strlen($history[0])==3 ))
+ $history[0] = $game["startplayer"].":";
+
+ return;
+}
+
+function count_nines($cards)
+{
+ $card = explode(";",$cards);
+ $nines = 0;
+
+ foreach($card as $c)
+ {
+ if($c == "25" || $c == "26") $nines++;
+ else if($c == "33" || $c == "34") $nines++;
+ else if($c == "41" || $c == "42") $nines++;
+ else if($c == "47" || $c == "48") $nines++;
+ }
+
+ return $nines;
+}
+
+function check_wedding($cards)
+{
+ $card = explode(";",$cards);
+
+ if( in_array("3",$card) && in_array("2",$card) )
+ return 1;
+
+ return 0;
+}
+
+function count_trump($cards)
+{
+ $card = explode(";",$cards);
+ $trump = 0;
+
+ /* count each trump */
+ foreach($card as $c)
+ if( (int)($c) <27)
+ $trump++;
+
+ /* subtract foxes */
+ if( in_array("19",$card))
+ $trump--;
+ if( in_array("20",$card) )
+ $trump--;
+ /* add one, in case the player has both foxes (schweinchen) */
+ if( in_array("19",$card) && in_array("20",$card) )
+ $trump++;
+
+ return $trump;
+}
+