PROGRAM 2
# Filename: Post.tcl Author: Anthony F. Ortiz
# This program stores a java file's class information in another file.
# Open the input and output files.
proc openFiles {filename} {
set f [open $filename r]
set f2 [open "Post.out" w]
set files [concat $f $f2]
return $files
}
# Store java file's class information in a list data structure.
proc getData {f} {
set list ""
while {[gets $f line] >= 0} {
regsub ";" $line "" line
regsub "\}" $line "" line
if {[regexp "public" $line] == 1} {
lappend list $line
}
if {[regexp "private" $line] == 1} {
lappend list $line
}
if {[regexp "protected" $line] == 1} {
lappend list $line
}
}
return $list
}
# Write the class information along with some html into the outfile so
# that it may be viewed on a web browser.
proc constructJavaDoc {f2 fname list} {
set filename fname
puts $f2 ""
puts $f2 ""
puts $f2 " $fname "
puts $f2 ""
puts $f2 ""
puts $f2 ""
foreach ct $list {
if {[regexp "class" $ct] == 1} {
set c [lsearch $ct "class"]
set c2 [expr $c + 1]
set classname [lrange $ct $c $c2]
puts $f2 " $classname
"
set c3 [expr 0]
set classname2 [lrange $ct $c3 $c2]
set classname3 [lrange $ct $c2 $c2]
if {[regexp "extends" $ct] == 1} {
set e [lsearch $ct "extends"]
set e2 [expr $e + 1]
set classname4 [lrange $ct $e $e2]
set classname5 [lrange $ct $e2 $e2]
set classname5 [concat ".." [concat $classname5 $classname3]]
set classname5 [join $classname5 "."]
puts $f2 " $classname5"
puts $f2 "
- $classname2 "
puts $f2 "
- $classname4 "
} else {
set classname6 [concat "Object" $classname3]
set classname6 [join $classname6 "."]
puts $f2 " $classname6"
puts $f2 "
- $classname2 "
}
if {[regexp "implements" $ct] == 1} {
set i [lsearch $ct "implements"]
set i2 [llength $ct]
set classname7 [lrange $ct $i $i2]
puts $f2 "
- $classname7 "
}
puts $f2 "
$classname3 "
}
if {[regexp "interface" $ct] == 1} {
set c [lsearch $ct "interface"]
set c2 [expr $c + 1]
set interface [lrange $ct $c $c2]
puts $f2 " $interface
"
set c3 0
set interface2 [lrange $ct $c2 $c2]
set interface3 [concat "Object" $interface2]
set interface3 [join $interface3 "."]
puts $f2 " $interface3"
set interface4 [lrange $ct $c3 $c2]
puts $f2 "- $interface4"
puts $f2 "
$interface2 "
}
if {[regexp "class" $ct] == 0} {
if {[regexp "interface" $ct] == 0} {
puts $f2 $ct
}
}
}
puts $f2 "
"
puts $f2 ""
puts $f2 ""
puts $f2 ""
}
# Close input and output file.
proc closeFiles {f f2} {
close $f
close $f2
}
proc main {filename} {
set files [openFiles $filename]
set f [lindex $files 0]
set f2 [lindex $files 1]
set list [getData $f]
constructJavaDoc $f2 $filename $list
closeFiles $f $f2
}
main [lindex $argv 0]
// Outfile: Post.out