Can you explain me a tclsh file?

Hello,

I got a file I am using, but I cannot understand what this file is doing...

Can someone explain?

Here is a part of the file:

#! /usr/bin/tclsh
set mctal [open mctal.[lindex $argv 0] r]
set pow [lindex $argv 1]
set SS [lindex $argv  2]
set a  [lindex $argv  3]
set b  [lindex $argv  4]
set c  [lindex $argv  5]
set d  [lindex $argv  6]
set e  [lindex $argv  7]
set f  [lindex $argv  8]
set g  [lindex $argv  9]
set h  [lindex $argv 10]
set i  [lindex $argv 11]
set j  [lindex $argv 12]
set k  [lindex $argv 13]
set l  [lindex $argv 14]
set m  [lindex $argv 15]
set n  [lindex $argv 16]
set o  [lindex $argv 17]
set p  [lindex $argv 18]
set q  [lindex $argv 19]
set r  [lindex $argv 20]
set s  [lindex $argv 21]
set t  [lindex $argv 22]
set u  [lindex $argv 23]
set c  [lindex $argv 24]
set v  [lindex $argv 25]
set w  [lindex $argv 26]
set x  [lindex $argv 27]
set y  [lindex $argv 28]
set z  [lindex $argv 29]
set aa  [lindex $argv 30]
set ab  [lindex $argv 31]
set ac  [lindex $argv 32]
set ad  [lindex $argv 33]
while {![regexp \^tally\ \*\($a\|$b|$c|$d|$e|$f|$g|$h|$i|$j|$k|$l|$m|$n|$o|$p|$q|$r|$s|$t|$u|$v|$w|$x|$y|$z|$aa|$ab|$ac|$ad\) [gets $mctal] line cell]} {
}
while {![regexp \^vals [gets $mctal] line]} {
}
regexp {^ *([0-9]\.[0-9]*[Ee][+-][0-9]*)} [gets $mctal] line $cell
...
[30 times the same sequence]
...
while {![regexp \^tally\ \*\($a\|$b|$c|$d|$e|$f|$g|$h|$i|$j|$k|$l|$m|$n|$o|$p|$q|$r|$s|$t|$u|$v|$w|$x|$y|$z|$aa|$ab|$ac|$ad\) [gets $mctal] line cell]} {
}
while {![regexp \^vals [gets $mctal] line]} {
}
regexp {^ *([0-9]\.[0-9]*[Ee][+-][0-9]*)} [gets $mctal] line $cell

eval set cella [expr $$a/($$a+$$b+$$c+$$d+$$e+$$f+$$g+$$h+$$i+$$j+$$k+$$l+$$m+$$n+$$o+$$p+$$q+$$r+$$s+$$t+$$u+$$v+$$w+$$x+$$y+$$z+$$aa+$$ab+$$ac+$$ad)]
eval set cellb [expr $$b/($$a+$$b+$$c+$$d+$$e+$$f+$$g+$$h+$$i+$$j+$$k+$$l+$$m+$$n+$$o+$$p+$$q+$$r+$$s+$$t+$$u+$$v+$$w+$$x+$$y+$$z+$$aa+$$ab+$$ac+$$ad)]
...
[30 times...]
...
eval set cellad [expr $$ad/($$a+$$b+$$c+$$d+$$e+$$f+$$g+$$h+$$i+$$j+$$k+$$l+$$m+$$n+$$o+$$p+$$q+$$r+$$s+$$t+$$u+$$v+$$w+$$x+$$y+$$z+$$aa+$$ab+$$ac+$$ad)]

close $mctal

exec sed -e "1,$ s/$pow/[expr $cella*$pow]/g" skele.$SS.a > skeleton.a
exec sed -e "1,$ s/$pow/[expr $cellb*$pow]/g" skele.$SS.b > skeleton.b

[30 times]

exec sed -e "1,$ s/$pow/[expr $cellac*$pow]/g" skele.$SS.ac > skeleton.ac
exec sed -e "1,$ s/$pow/[expr $cellad*$pow]/g" skele.$SS.ad > skeleton.ad

puts stdout "a = $cella"
puts stdout "b = $cellb"

[30 times]

puts stdout "ac = $cellac"
puts stdout "ad = $cellad"

I can understand the variable definition, the sed command and the output assigning, but not the regular expression part...

Thanks