Previous: Fortran API   Up: Madrigal developer's guide   Next: Madrigal file format

Madrigal Tcl API

Madrigal extensions to Tcl (madtclsh)

Madtclsh is an extended tcl interpreter which adds direct support for manipulating Cedar database files and their contents. This executable is located in madroot/bin. There are eight new commands:

The first two commands create new tcl objects which can be used to manipulate Cedar files (mad) and Cedar metacode information (cedarCode). The remaining commands determine the Madrigal key given a time and date (getKey) and provide basic geometry and geographic coordinate functions (isr_point, isr_look, isr_geodetic2geocentric, isr_geocentric2geodetic and isr_dircos).

The script shown below, summarizeCedarFile, illustrates the use of madtclsh. It begins by creating a new madrec object (mad madin). More than one madrec object can be created. For example, a script to translate a Cedar file from Madrigal to Cedar Ascii format would require two. The mad command creates a new tcl command - $madin in the example. Typically the first thing done with the new command is to associate it with a Cedar file ($madin open 1 $infile). The file can then be read using the getNextRecord subcommand ($madin getNextRecord). Once a record has read, numerous subcommands are available to extract information from the record (e.g. $madin get startTime). When the file is no longer needed, it can be disassociated from the madrec object ($madin close). Finally, when the madrec object is no longer needed, it can be destroyed ($madin destroy).

# The madtclsh path is longer than 32 characters. So, we take advantage
# of the fact that a backslash continues a comment line in tcl \
exec /opt/madrigal/bin/madtclsh "$0" ${1+"$@"}

# summarizeCedarFile prints a one line per record summary of a CEDAR
# file.  The file may be any of the 5 supported CEDAR formats (Madrigal,
# Blocked Binary, Cbf, Unblocked Binary or ASCII"), and may include any
# mixture of prologue, header and data records. The format of the file is
# determined automatically.

# Usage: printCedarRecords filename firstRecord lastRecord

# Get parameter codes
cedarCode cedarCode

# Get number of parameters
set nargs $argc
if {$nargs != 1} {
    puts {Usage: summarizeCedarFile filename}

# Get file name from the argument list
set infile [lindex $argv 0]

# Create madrec object for the input file. Specify file type 1 for automatic
# determination of the CEDAR file type
mad madin
catch [$madin open 1 $infile]

# Print a one line per record summary of the file
puts "  rec     Start Time            End Time      kinst krec kindat"
set rec 0
while {[set status [$madin getNextRecord]] == 0} {
    incr rec
    set recno [format %4d $rec]
    set startTime [$madin get startTime]
    set yr1 [lindex $startTime 0]
    set mo1 [lindex $startTime 1]
    set dy1 [lindex $startTime 2]
    set hr1 [lindex $startTime 3]
    set mn1 [lindex $startTime 4]
    set sc1 [lindex $startTime 5]
    set zero 0
    if {[string length $hr1] == 1} {
        set hr1 $zero$hr1
    if {[string length $mn1] == 1} {
        set mn1 $zero$mn1
    if {[string length $sc1] == 1} {
        set sc1 $zero$sc1
    set endTime [$madin get endTime]
    set yr2 [lindex $endTime 0]
    set mo2 [lindex $endTime 1]
    set dy2 [lindex $endTime 2]
    set hr2 [lindex $endTime 3]
    set mn2 [lindex $endTime 4]
    set sc2 [lindex $endTime 5]
    set zero 0
    if {[string length $hr2] == 1} {
        set hr2 $zero$hr2
    if {[string length $mn2] == 1} {
        set mn2 $zero$mn2
    if {[string length $sc2] == 1} {
        set sc2 $zero$sc2
    puts "$recno  $mo1/$dy1/$yr1 $hr1:$mn1:$sc1  $mo2/$dy2/$yr2 $hr2:$mn2:$sc2 \
         [$madin get kinst] \
         [$madin get krec] \
         [$madin get kindat]"

# Close file and delete madrec object
$madin close
$madin destroy

madtclsh Commands

Further details of the Madrigal Tcl are found by examining the tcl source code from OpenMadrigal.

Previous: Fortran API   Up: Madrigal developer's guide   Next: Madrigal file format