#!/bin/sh
# Restart tclsh\
exec tclsh "$0" "$@"

# BaseProgram for 386BASIC
###################################################################
#         Ʃʬ         KAKUDAI.BAS                            #
#  ñƩˤ ѤѲ׻ޤ Υץ        #
#  ˿ľ˶ᤤʪΤ  褹ΤΤ       #
#  ͤФޤ                           1993.05.16   kiyo        #
###################################################################
# for tclsh	kac	2001.06.29
# եϥ⡼ɤʤ
# 󥿥饯ƥ֥⡼ɤǽ跿νϤ
# ͿƵưɸϤ


# Υ
	set Start	{1}
	set End		{1}
# ʬ(+1)
	set K		{4}

# ݥѿ
	set Point	{0}

# 륵
	set C		{0}

# ץС
	set VER	{kac ver 2.0 for tclsh}
# 
	set Interactive	{No}
### ֥ץ
######	ޥɲ
proc usage {} {
global VER
puts "
usage:	kac \[options\ \.\.\.\] \[Start End \[div\]\]
-------------------------------------------------------
args:
	Start		Start size
	End		End size
	div		devide value
options:
	-i	interactive Mode
	-h	show this message
-------------------------------------------------------
program Version :\t$VER

"
}
# Ϥ򽦤(μ¿ͤΤ)
proc GetInput {message} {
	puts -nonewline "\n${message}\ \ --> "

regsub {\-} [gets stdin] {\\-} result

	switch -regexp "${result}" {
	{^[0-9]+\.[0-9]*$|^[0-9]+$}	{return ${result}}
	default	{GetInput "οͤϤƲ"}
	}
}
# åǡ (󥿥饯ƥ֥⡼ɤΤ߻)
proc Get_Base_Value {} {
global Start End K
puts "
	åǡϤƤ
"
set Start [GetInput "   A Υ A="]
set End [GetInput "   B Υ B="]
set K [GetInput "  ʬ(+1)K="]
puts " ----------------------------"

return
}

proc Get_Val {} {
global Start End K

	Get_Base_Value

 if {${Start} == ${End}} then {
	puts "A  B פƤޤ"
	Get_Val
} elseif {${Start} <= 0} then {
	puts "A Ǥ"
	Get_Val
} elseif {${End} <= 0} then {
	puts "B Ǥ"
	Get_Val
} elseif {${K} <= 0} then {
	ʬǤʤƤϤޤ
	Get_Val
} else {puts OK}

return
}
#
proc Calk {Start End K} {

# 
  set C0 ${Start}


puts -nonewline "
-------------------------------
Start=${Start} End=${End} ʬ=${K}
-------------------------------
"
for {set POI 0} {${POI} <= ${K}} {incr POI} {
            set C [expr (${Start} * ${End} * ${K}. ) / ( ${Start} * ${POI} + ${End} * ( ${K} - ${POI}))]
            set PCT [expr double(100. * ${C} / ${C0}) ]
puts [format "%1.2d/%1.2d = %-6.4g %-6.4g%%" ${POI} ${K} ${C} ${PCT}]
}
puts "-------------------------------"

}

# λȽ
proc isEnd {} {
global FLG
puts "
	׻³ޤ?
 0 : ɽ
 1 : åǡ
 2 : λ
------------------------------------"
set result [GetInput "ϤƤ "]

switch ${result} {
{0}	{set FLG 0}
{1}	{set FLG 1}
{2}	{set FLG 2}
default	{set FLG 2}
}

}

# μ
set count $argc
if !{$count} then {
	set FLG 	{1}
	set Interactive	{Yes}
} else {
	set FLG {0}
	foreach INPUT ${argv} {

if [regexp ^\-.* $INPUT ] then {
regsub {^\-} ${INPUT} "" INPUT

switch -regexp $INPUT {
{^h}	{usage ; exit 0}
{^i}	{
set Interactive {Yes}
set ARGs {}
}
default {
puts "unknoun option \[\-${INPUT}\]"
usage ;exit 0}
}
} else {lappend ARGs ${INPUT}}
	}

if [llength ${ARGs}] then {
	set Start	[lindex ${ARGs} 0]
	set End		[lindex ${ARGs} 1]
	set K		[lindex ${ARGs} 2]
if ![string compare ${K} "" ] then {set K {4}}
} else { set FLG {1}}
}
# ᥤ롼
switch ${Interactive} {
{Yes} {
	while {1} {
# åǡ
switch ${FLG} {
{1}	{
	set Result [Get_Val]
#	puts [list ${Start} ${End} ${K}]
	Calk ${Start} ${End} ${K}
}
{2}	{
	exit 0
}
default	{
	Calk ${Start} ${End} ${K}
}
}

isEnd
	}
}
default {
	Calk ${Start} ${End} ${K}
}
}
exit 0

