#!/usr/bin/perl
$finished = 0;
$mem      = 0;
sub error;
if ($ARGV[0] eq "-v")
{
	print "tlicalc version 0.1\n";
	exit 0;
}
elsif($ARGV[0] eq "-h" || $ARGV[0] eq "--help")
{
	error;
}
else
{
	$EINGABE = $ARGV[0];
}

while(!$finished)
{
	if($EINGABE eq "")
	{
		$EINGABE = <STDIN>;
	}
	else
	{
		$finished = -1;
	}
	chomp ($EINGABE);
	if($EINGABE =~ /^([\-|\+]?\d*\.?\d*)\s*(%|q|\+|\-|\*|\/)\s*([\-|\+]?\d*\.?\d*)$/)
	{
		$left  = $1;
		$right = $3;
		if($left == 0)
		{
			$usemem = 1;
			$left = $mem;
		}
		if($right eq "")
		{
			$right = $mem;
			$usemem = 2;	
		}
		if($2 eq "+")
		{ $res = $left + $right; $op = "+";}
		elsif($2 eq "-")
		{ $res = $left - $right; $op = "-";}
		elsif($2 eq "*")
		{ $res = $left * $right; $op = "*";}
		elsif($2 eq "q")
		{ $res = $left ** $right; $op = "hoch";}
		elsif($2 eq "%")
		{ $res = $left * $right / 100; $op = "% von"}
		elsif($2 eq "/")
		{
			if($right != 0)
			{
				$res = $left / $right;
			}
			else
			{
				$msg = "error! division by zero!\n";
				error;
			}
			$op = "/";
		}
		$mem = $res;
		if($usemem == 1)
		{
			$left = "(" . $left . ")";
			$usemem = 0;
		}
		elsif($usemem == 2)
		{
                        $right = "(" . $right . ")";
                        $usemem = 0;
                }
		print "$left $op $right = $res\n";
		$EINGABE = "";
	}
	elsif($EINGABE =~ /^(\.|\^D)/)
	{
		$finished = -1;
	}
	else
	{
		$msg = "unsuported format!\n";
		error;
	}
}
exit 0;
sub error
{
	print "$msg";
	$msg = "";
	print "usage: [operand1] operator operand2\n";
	print "supported operators: * + - / % q\n";
	print "a single . quits the program\n";
	exit 1;
}
