#!/bin/sh
# \
exec oagwish "$0" "$@"


set auto_path [linsert $auto_path 0  /usr/local/oag/apps/lib/$env(HOST_ARCH)]
set auto_path [linsert $auto_path 0  /usr/local/oag/lib_patch/$env(HOST_ARCH)]
set CVSRevisionAuthor "\$Revision: 1.1 $ \$Author: borland $"
APSDebugPath

APSApplication . -name HLSControl -version $CVSRevisionAuthor \
  -overview "Provides on/off controls for the hydrostatic level system."

set status Working...
APSScrolledStatus .status -parent .userFrame -width 40 \
        -textVariable status
update

proc MakeCaptorSectorList {} {
    if [catch {exec cavget -list=S: -range=begin=1,end=40,format=%02ld \
                 -list=:SA:LC:1:onoff -pend=5} level1List] {
        return -code error $level1List
    }
    set sector 1
    set sectorList ""
    foreach item $level1List {
        global SectorFlag
        if [string compare $item ?]==0 {
            set SectorFlag($sector) 0
        } else {
            set SectorFlag($sector) 1
            lappend sectorList [format %02ld $sector]
        }
        incr sector
    }
    APSSetVarAndUpdate status "[llength $sectorList] sectors responded: [join $sectorList ,]"
    return $sectorList
}

proc MakeSectorButtons {widget args} {
    set parent ""
    set sectorList ""
    set variableRoot ""
    APSStrictParseArguments {parent sectorList variableRoot}

    APSFrameGrid $widget -parent $parent -yList $sectorList
    foreach sector $sectorList {
        set w $parent$widget.$sector
        APSButton .on -parent $w -text "On" -command \
          "SwitchLevelCaptors -state 1 -sectorList $sector; InquireLevelCaptors -sectorList $sector -variableRoot $variableRoot" -contextHelp \
          "Turns on all the level captors in sector $sector."
        APSButton .off -parent $w -text "Off" -command \
          "SwitchLevelCaptors -state 0 -sectorList $sector; InquireLevelCaptors -sectorList $sector -variableRoot $variableRoot" -contextHelp \
          "Turns off all the level captors in sector $sector."
        APSButton .inquire -parent $w -text "Inquire" -command \
          "InquireLevelCaptors -sectorList $sector -variableRoot $variableRoot" -contextHelp \
          "Inquires about the on/off state of level captors in sector $sector."
        global $variableRoot$sector
        APSLabeledOutput .numOn -parent $w -label "Number on: " \
          -textVariable $variableRoot$sector -width 4 -contextHelp \
          "Shows the number of captors in sector $sector that are on."
        InquireLevelCaptors -sectorList $sector -variableRoot $variableRoot
        update
    }
}

proc InquireLevelCaptors {args} {
    set variableRoot ""
    set sectorList ""
    APSStrictParseArguments {variableRoot sectorList} 

    set sectorList02 ""
    foreach item $sectorList {
        scan $item %ld sector
        lappend sectorList02 [format %02ld $sector]
    }
    if [catch {exec cavget -list=S: -list=[join $sectorList02 ,] \
                 -list=:SA:LC: -range=begin=1,end=6 -list=:onoff \
                 -pend=2} levelList] {
        return -code error $levelList
    }
    set dataIndex 0
    foreach sector $sectorList02 {
        global $variableRoot$sector
        set $variableRoot$sector 0
        foreach LC {1 2 3 4 5 6} {
            if [string compare [lindex $levelList $dataIndex] On]==0 {
                incr $variableRoot$sector
            }
            incr dataIndex
        }
    }
}

proc MakeGlobalButtons {widget args} {
    set parent ""
    set sectorList ""
    set variableRoot ""
    APSStrictParseArguments {parent sectorList variableRoot}

    APSFrame $widget -parent $parent -label "Global controls" 
    set w $parent$widget.frame

    APSButton .on -parent $w -text "All on" -command \
      "SwitchLevelCaptors -state 1 -sectorList [list $sectorList] -variableRoot $variableRoot" \
      -contextHelp "Turns on all captors."
    APSButton .off -parent $w -text "All off" -command \
      "SwitchLevelCaptors -state 0 -sectorList [list $sectorList] -variableRoot $variableRoot" \
      -contextHelp "Turns off all captors."
    APSButton .inquire -parent $w -text "All inquire" -command \
      "InquireLevelCaptors -sectorList [list $sectorList] -variableRoot $variableRoot" \
      -contextHelp "Inquires from the controls system the state of all level captors."
}

proc SwitchLevelCaptors {args} {
    set state 0
    set sectorList ""
    set variableRoot ""
    APSStrictParseArguments {state sectorList variableRoot}

    set sectorList02 ""
    foreach item $sectorList {
        scan $item %ld sector
        lappend sectorList02 [format %02ld $sector]
    }

    switch $state {
        0 {
            set state Off
        }
        1 {
            set state On
        }
    }

    if [catch {exec cavput -list=S: -list=[join $sectorList02 ,] \
                 -list=:SA:LC: -range=begin=1,end=6 -list=:onoff=$state \
                 -pend=2 -blunder=silently} result] {
        return -code error $result
    }
    InquireLevelCaptors -sectorList $sectorList -variableRoot $variableRoot
}

set captorSectorList [MakeCaptorSectorList]
MakeSectorButtons .sb -parent .userFrame -sectorList $captorSectorList -variableRoot numberOn
MakeGlobalButtons .gb -parent .userFrame -sectorList $captorSectorList -variableRoot numberOn
