]> OCCT Git - occt-wok.git/commitdiff
Initial revision
authorcas <cas@opencascade.com>
Wed, 3 Nov 1999 18:04:38 +0000 (18:04 +0000)
committercas <cas@opencascade.com>
Wed, 3 Nov 1999 18:04:38 +0000 (18:04 +0000)
src/WOKTclLib/wokPRM.tcl [new file with mode: 0755]

diff --git a/src/WOKTclLib/wokPRM.tcl b/src/WOKTclLib/wokPRM.tcl
new file mode 100755 (executable)
index 0000000..2e1820b
--- /dev/null
@@ -0,0 +1,1492 @@
+;#
+;# Cree une fenetre pour les parametres
+;#
+proc wokPRMAff { } {
+    set verrue [wokCWD readnocell]
+    if [wokinfo -x $verrue] {
+       if [wokPRM:Exists] {
+           wokPRM:Kill
+       }
+       wokPRM:Create $verrue
+    } else {
+       wokDialBox .wokcd {Unknown location} "Location $verrue is unknown" {} -1 OK
+    }
+    return
+}
+;#
+;# cree le toplevel si il n'existe pas et init l'arbre , pop le toplevel sinon
+;#
+proc wokPRM:Create { location } {
+    global IWOK_GLOBALS
+
+    if [info exists IWOK_GLOBALS(PRM,toplevel)] {
+       set w $IWOK_GLOBALS(PRM,toplevel)
+       if [winfo exists $w ] {
+           wm deiconify $w
+           raise $w
+           return 1
+       } else {
+           return -1
+       }
+    }
+
+    set boldfnt [tix option get bold_font]
+
+    set IWOK_GLOBALS(PRM,title)         "Parameters ($location)"
+    set IWOK_GLOBALS(PRM,geometry)      1072x660
+    set IWOK_GLOBALS(PRM,toplevel)      .woktopl:params
+    set IWOK_GLOBALS(PRM,location)      $location
+
+    wokPRMInitDescriptionByClass $location
+    set IWOK_GLOBALS(PRM,Description)      [tixDisplayStyle imagetext -font $boldfnt]
+    set IWOK_GLOBALS(PRM,DescriptionREAD)  [tixDisplayStyle imagetext -fg orange -font $boldfnt]
+    set IWOK_GLOBALS(PRM,DescriptionFREAD) [tixDisplayStyle imagetext -fg orange]
+
+    set w $IWOK_GLOBALS(PRM,toplevel)  
+
+    toplevel    $w
+    wm title    $w $IWOK_GLOBALS(PRM,title) 
+    wm geometry $w $IWOK_GLOBALS(PRM,geometry)
+    
+    wokButton setw [list params $w]
+
+    menubutton $w.file -menu $w.file.m -text File -underline 0 -takefocus 0
+    menu $w.file.m 
+    $w.file.m add command -label "Close     " -underline 0 -command "wokPRM:Kill"
+
+    menubutton $w.help -menu $w.help.m -text Help -underline 0 -takefocus 0
+    menu $w.help.m
+    $w.help.m add command -label "Help"      -underline 1 -command [list wokPRM:Help $w]
+
+    set notes [tixNoteBook $w.notes -ipadx 5 -ipady 5] 
+
+    tixForm $w.file ; tixForm $w.help -right -2
+    tixForm $notes -top $w.file -left 2 -right %99 -bottom %99
+
+    $notes add pag1 -createcmd "wokPRM:NOT wokPRM:ByClass $w $notes pag1" -label "By Class" \
+           -raisecmd [list wokPRM:UPD $w]
+    $notes add pag2 -createcmd "wokPRM:NOT wokPRM:ByFile $w $notes pag2" -label "By file" \
+           -raisecmd [list wokPRM:UPD $w]
+    $notes add pag3 -createcmd "wokPRM:NOT wokPRM:Modify $w $notes pag3" -label "Modify" \
+           -raisecmd [list wokPRM:UPD $w]
+
+    $notes.nbframe configure -backpagecolor  grey51
+
+    return
+}
+;#
+;#           ((((((((((  M O D I F Y  ))))))))))
+;#
+proc wokPRM:wrkst { } {
+    global IWOK_GLOBALS
+    if { $IWOK_GLOBALS(PRM,Modify,wrkst,all) == 1 } {
+       foreach  x [array names IWOK_GLOBALS PRM,Modify,wrkst,but,*]  {
+           if { "$x" != "PRM,Modify,wrkst,but,all" } {
+               $IWOK_GLOBALS($x) select
+           }
+       }
+    }
+    return
+}
+
+proc wokPRM:dbms { } {
+    global IWOK_GLOBALS
+    if { $IWOK_GLOBALS(PRM,Modify,dbms,all) == 1 } {
+       foreach  x [array names IWOK_GLOBALS PRM,Modify,dbms,but,*]  {
+           if { "$x" != "PRM,Modify,dbms,but,all" } {
+               $IWOK_GLOBALS($x) select
+           }
+       }
+    }
+    return
+}
+
+proc wokPRM:Modify { adr nb page } {
+    global IWOK_GLOBALS
+    set w [$nb subwidget $page]
+    set fram [frame $w.top -relief sunken -bd 1]
+    pack $fram -expand yes -fill both -padx 1 -pady 1
+
+    tixLabelEntry $fram.nam  -label "Parameter name :"  -labelside left -options {
+       label.anchor w
+       entry.width 35
+    }
+
+    tixLabelEntry $fram.val  -label "Current value  :"  -labelside left -options {
+       label.anchor w
+       entry.width 35
+    }
+
+    tixLabelEntry $fram.app  -label "Append         :"  -labelside left -options {
+       label.anchor w
+       entry.width 35
+    }
+
+    tixLabelEntry $fram.fil  -label "                    "  -labelside left -options {
+       label.anchor w
+       entry.width 35
+       entry.relief flat
+    }
+
+    tixLabelFrame $fram.scope -label "Scope for modification:"
+
+    set scp [$fram.scope subwidget frame]
+
+    set ici [wokinfo -t [set x :$IWOK_GLOBALS(PRM,location)]]
+    if { "$ici" == "devunit" } {
+       radiobutton $scp.f -text [set loc [wokinfo -f $x]] \
+               -var IWOK_GLOBALS(PRM,Modify,scope) -val [list [wokinfo -n $loc] [wokinfo -p AdmDir $loc]]
+       if { "$x" == "$loc" } { $scp.f select }
+       radiobutton $scp.s -text [set loc [wokinfo -s $x]] \
+               -var IWOK_GLOBALS(PRM,Modify,scope) -val [list [wokinfo -n $loc] [wokinfo -p AdmDir $loc]]
+       if { "$x" == "$loc" } { $scp.s select }
+       radiobutton $scp.w -text [set loc [wokinfo -w $x]] \
+               -var IWOK_GLOBALS(PRM,Modify,scope) -val [list [wokinfo -n $loc] [wokinfo -p AdmDir $loc]]
+       if { "$x" == "$loc" } { $scp.w select }
+       radiobutton $scp.u -text [set loc [wokinfo -u $x]] \
+               -var IWOK_GLOBALS(PRM,Modify,scope) -val [list [wokinfo -n $loc] [wokinfo -p source:. $loc]]
+       if { "$x" == "$loc" } { $scp.u select }
+       pack $scp.f $scp.s $scp.w $scp.u -anchor w  -padx 1m -pady 1m
+    } elseif { "$ici" == "workbench" } {
+       radiobutton $scp.f -text [set loc [wokinfo -f $x]] \
+               -var IWOK_GLOBALS(PRM,Modify,scope) -val [list [wokinfo -n $loc] [wokinfo -p AdmDir $loc]]
+       if { "$x" == "$loc" } { $scp.f select }
+       radiobutton $scp.s -text [set loc [wokinfo -s $x]] \
+               -var IWOK_GLOBALS(PRM,Modify,scope) -val [list [wokinfo -n $loc] [wokinfo -p AdmDir $loc]]
+       if { "$x" == "$loc" } { $scp.s select }
+       radiobutton $scp.w -text [set loc [wokinfo -w $x]] \
+               -var IWOK_GLOBALS(PRM,Modify,scope) -val [list [wokinfo -n $loc] [wokinfo -p AdmDir $loc]]
+       if { "$x" == "$loc" } { $scp.w select }
+       label $scp.bid1
+       pack $scp.f $scp.s $scp.w $scp.bid1 -anchor w  -padx 1m -pady 1m
+       
+    } elseif { "$ici" == "workshop" } {
+       radiobutton $scp.f -text [set loc [wokinfo -f $x]] \
+               -var IWOK_GLOBALS(PRM,Modify,scope) -val [list [wokinfo -n $loc] [wokinfo -p AdmDir $loc]]
+       if { "$x" == "$loc" } { $scp.f select }
+       radiobutton $scp.s -text [set loc [wokinfo -s $x]] \
+               -var IWOK_GLOBALS(PRM,Modify,scope) -val [list [wokinfo -n $loc] [wokinfo -p AdmDir $loc]]
+       if { "$x" == "$loc" } { $scp.s select }
+       label $scp.bid1 ; label $scp.bid2
+       pack $scp.f $scp.s $scp.bid1 $scp.bid2 -anchor w  -padx 1m -pady 1m
+    } elseif { "$ici" == "factory" } {
+
+       radiobutton $scp.f -text [set loc [wokinfo -f $x]] \
+               -var IWOK_GLOBALS(PRM,Modify,scope) -val [list [wokinfo -n $loc] [wokinfo -p AdmDir $loc]]
+       if { "$x" == "$loc" } { $scp.f select }
+       label $scp.bid1 ; label $scp.bid2 ; label $scp.bid3
+       pack $scp.f $scp.bid1 $scp.bid2 $scp.bid3 -anchor w  -padx 1m -pady 2m
+    } elseif { "$ici" == "session" } {
+       set IWOK_GLOBALS(PRM,Modify,scope) [list : [pwd]]
+    }
+
+    tixLabelFrame $fram.wrkst -label "Modify for stations:"
+    set wrkst [$fram.wrkst subwidget frame]
+
+    set IWOK_GLOBALS(PRM,Modify,wrkst,but,all) \
+           [checkbutton ${wrkst}.all -text all -var IWOK_GLOBALS(PRM,Modify,wrkst,all) -comm wokPRM:wrkst]
+    tixForm $IWOK_GLOBALS(PRM,Modify,wrkst,but,all) -top 2
+    
+    set prev {} ; set curr {} ;set curwrkst [wokprofile -s]
+    foreach x [list sun sil ao1 hp wnt lin] {
+       set curr [string tolower ${wrkst}.${x}]
+       
+       checkbutton $curr -text $x -variable IWOK_GLOBALS(PRM,Modify,wrkst,$x) -command wokPRM:wrkst
+       set IWOK_GLOBALS(PRM,Modify,wrkst,but,$x) $curr
+       if { "$x" == "$curwrkst" } {
+           $curr select
+       }
+       
+       if { $prev == {} } {
+           tixForm $curr -top $IWOK_GLOBALS(PRM,Modify,wrkst,but,all)
+       } else {
+           tixForm $curr -top $IWOK_GLOBALS(PRM,Modify,wrkst,but,all) -left $prev
+       }
+       set prev $curr
+    }
+
+    tixLabelFrame $fram.dbms -label "DBMs: "
+    set dbms [$fram.dbms subwidget frame]
+
+    set IWOK_GLOBALS(PRM,Modify,dbms,but,all) \
+           [checkbutton ${dbms}.all -text all -var IWOK_GLOBALS(PRM,Modify,dbms,all) -comm wokPRM:dbms]
+    tixForm $IWOK_GLOBALS(PRM,Modify,dbms,but,all) -top 2
+
+    set prev {} ; set curr {} ; set curdbms [wokprofile -b]
+    foreach x [list DFLT OBJS] {
+       set curr [string tolower ${dbms}.${x}]
+       checkbutton $curr -text $x -variable IWOK_GLOBALS(PRM,Modify,dbms,$x) -command wokPRM:dbms
+       set IWOK_GLOBALS(PRM,Modify,dbms,but,$x) $curr
+       if { "$x" == "$curdbms" } {
+           $curr select
+       }
+       if { $prev == {} } {
+           tixForm $curr -top $IWOK_GLOBALS(PRM,Modify,dbms,but,all)
+       } else {
+           tixForm $curr -top $IWOK_GLOBALS(PRM,Modify,dbms,but,all) -left $prev
+       }
+       set prev $curr
+    }
+
+    checkbutton $fram.shot -text "One shot" -variable IWOK_GLOBALS(PRM,Modify,oneshot)
+    checkbutton $fram.verb -text "Verbose " -variable IWOK_GLOBALS(PRM,Modify,verbose)
+
+    tixScrolledListBox $fram.cmp -command wokPRM:Selected 
+
+    tixButtonBox $fram.but -orientation horizontal -padx 0 -pady 0
+
+    tixScrolledText $fram.txt ; $fram.txt subwidget text  config -font $IWOK_GLOBALS(font)
+
+    tixForm $fram.nam -top 10m       -left 1m -right %75
+    tixForm $fram.val -top 25m -left 1m -right %75
+    tixForm $fram.app -top 40m -left 1m -right %75
+
+    tixForm $fram.cmp   -top 10m -left $fram.nam -right %99 -bottom %30
+    tixForm $fram.fil   -left 2                  -right %99 -bottom %99
+    tixForm $fram.txt   -top $fram.cmp           -right %99 -bottom $fram.fil
+
+    tixForm $fram.scope -top $fram.cmp   -left 1m -right $fram.txt
+    tixForm $fram.wrkst -top $fram.scope -left 1m -right $fram.txt
+    tixForm $fram.dbms  -top $fram.wrkst -left 1m 
+    tixForm $fram.shot -left $fram.dbms -top $fram.wrkst -right $fram.txt
+    tixForm $fram.verb -left $fram.dbms -top $fram.shot  -right $fram.txt
+    tixForm $fram.but   -top $fram.dbms  -left 1m -right $fram.txt -bottom $fram.fil
+
+    [set IWOK_GLOBALS(PRM,Modify,labnam) [$fram.nam subwidget label]] config -font $IWOK_GLOBALS(font)
+    set IWOK_GLOBALS(PRM,Modify,entnam)  [$fram.nam subwidget entry] 
+    $IWOK_GLOBALS(PRM,Modify,entnam)     config -text IWOK_GLOBALS(PRM,Modify,name)
+    
+    [set IWOK_GLOBALS(PRM,Modify,labval) [$fram.val subwidget label]] config -font $IWOK_GLOBALS(font)
+    set IWOK_GLOBALS(PRM,Modify,entval)  [$fram.val subwidget entry]
+    $IWOK_GLOBALS(PRM,Modify,entval)     config -text IWOK_GLOBALS(PRM,Modify,value)
+    
+    [set IWOK_GLOBALS(PRM,Modify,labapp) [$fram.app subwidget label]] config -font $IWOK_GLOBALS(font)
+    set IWOK_GLOBALS(PRM,Modify,entapp)  [$fram.app subwidget entry]
+    $IWOK_GLOBALS(PRM,Modify,entapp)     config -text IWOK_GLOBALS(PRM,Modify,append)
+
+    [set IWOK_GLOBALS(PRM,Modify,labfil) [$fram.fil subwidget label]] config -font $IWOK_GLOBALS(font)
+    set IWOK_GLOBALS(PRM,Modify,entfil)  [$fram.fil subwidget entry]
+    $IWOK_GLOBALS(PRM,Modify,entfil)     config -text IWOK_GLOBALS(PRM,Modify,file)
+
+    set IWOK_GLOBALS(PRM,Modify,compl) [$fram.cmp subwidget listbox]
+    [set IWOK_GLOBALS(PRM,Modify,text) [$fram.txt subwidget text]]  config -font $IWOK_GLOBALS(font)
+
+    set IWOK_GLOBALS(PRM,Modify,bshow)   [$fram.but add show   -text Show   -comm wokPRM:ShowModif]
+    set IWOK_GLOBALS(PRM,Modify,bcancel) [$fram.but add cancel -text Cancel -comm wokPRM:CancelModif]
+    set IWOK_GLOBALS(PRM,Modify,bwrite)  [$fram.but add apply  -text Write  -comm [list wokPRM:ApplyModif W]]
+    set IWOK_GLOBALS(PRM,Modify,bappend) [$fram.but add append -text Append -comm [list wokPRM:ApplyModif A]]
+
+    $IWOK_GLOBALS(PRM,Modify,bshow)   configure -state active
+    $IWOK_GLOBALS(PRM,Modify,bcancel) configure -state active
+    $IWOK_GLOBALS(PRM,Modify,bwrite)  configure -state active
+    $IWOK_GLOBALS(PRM,Modify,bappend) configure -state active
+
+    ;# completions des noms de parametres
+    ;#
+    bind $IWOK_GLOBALS(PRM,Modify,entnam) <space> {
+       wokPRM:InitCompletionModify %W
+       wokPRM:AffLocModify [wokPRM:CompleteModify [wokUtils:EASY:sb [%W get]]]
+    }
+
+    bind $IWOK_GLOBALS(PRM,Modify,entnam) <Return> {
+       wokPRM:ModifyParam [wokUtils:EASY:sb [%W get]]
+    }
+
+    bind $IWOK_GLOBALS(PRM,Modify,entval) <Return> {
+       wokPRM:ShowModif
+    }
+
+    return
+}
+
+proc wokPRM:ShowModif { } {
+    global IWOK_GLOBALS
+
+    set pnam  [wokUtils:EASY:sb [$IWOK_GLOBALS(PRM,Modify,entnam) get]]
+    if { "$pnam" == "" } {
+       return
+    }
+    set clas  [wokPRM:ClassName $pnam]
+    if { "[string index $pnam 0]" != "%" } {
+       set pnam "%${pnam}"
+    }
+    if { "[string index $clas 0]" == "%" } {
+       set clas [string range $clas 1 end]
+    }
+
+    set IWOK_GLOBALS(PRM,Modify,pnam) $pnam
+
+    set pathdef [lindex $IWOK_GLOBALS(PRM,Modify,scope) 1]
+    set redef   [lindex $IWOK_GLOBALS(PRM,Modify,scope) 0]_$clas
+    set IWOK_GLOBALS(PRM,Modify,file) $pathdef/${redef}.edl
+
+    if { [set appval [$IWOK_GLOBALS(PRM,Modify,entapp) get]] != "" } {
+       set action "@string "
+       set assign "+="
+       set value  $appval
+    } else {
+       set action "@set "
+       set assign "="
+       set value [$IWOK_GLOBALS(PRM,Modify,entval) get]
+    }
+
+    catch { unset IWOK_GLOBALS(PRM,Modify,edlbuf) }
+
+    append IWOK_GLOBALS(PRM,Modify,edlbuf) "-- File:   ${clas}.edl" \n
+    append IWOK_GLOBALS(PRM,Modify,edlbuf) "-- Author:         [id user]" \n
+    append IWOK_GLOBALS(PRM,Modify,edlbuf) "-- History:        [fmtclock [getclock]]" \n \n
+
+    if { $IWOK_GLOBALS(PRM,Modify,verbose) == 1 } {
+       append IWOK_GLOBALS(PRM,Modify,edlbuf) "@verboseon;" \n
+    }
+
+
+    if { $IWOK_GLOBALS(PRM,Modify,oneshot) == 1 } {
+       append IWOK_GLOBALS(PRM,Modify,edlbuf) "-- standard protection against multiple execution" \n
+       append IWOK_GLOBALS(PRM,Modify,edlbuf) "@ifnotdefined ( ${pnam}_EDL ) then" \n
+       append IWOK_GLOBALS(PRM,Modify,edlbuf) "@set ${pnam}_EDL = \"\"\;" \n \n
+    }
+
+    if { $IWOK_GLOBALS(PRM,Modify,wrkst,all) == 0 } {
+       if { $IWOK_GLOBALS(PRM,Modify,dbms,all) == 0 } {
+           append IWOK_GLOBALS(PRM,Modify,edlbuf) "@if ( [wokPRM:test_wrkst] ) then" \n
+           append IWOK_GLOBALS(PRM,Modify,edlbuf) "  @if ( [wokPRM:test_dbms]  ) then" \n
+           append IWOK_GLOBALS(PRM,Modify,edlbuf) "    $action $pnam $assign \"$value\"\;" \n
+           append IWOK_GLOBALS(PRM,Modify,edlbuf) "  @endif\;" \n
+           append IWOK_GLOBALS(PRM,Modify,edlbuf) "@endif\;"
+       } else {
+           append IWOK_GLOBALS(PRM,Modify,edlbuf) "@if ( [wokPRM:test_wrkst] ) then" \n
+           append IWOK_GLOBALS(PRM,Modify,edlbuf) "  $action $pnam $assign \"$value\"\;" \n
+           append IWOK_GLOBALS(PRM,Modify,edlbuf) "@endif\;"
+       }
+    } else {
+       if { $IWOK_GLOBALS(PRM,Modify,dbms,all) == 0 } {
+           append IWOK_GLOBALS(PRM,Modify,edlbuf) "@if ( [wokPRM:test_dbms] ) then" \n
+           append IWOK_GLOBALS(PRM,Modify,edlbuf) "  $action $pnam $assign \"$value\"\;" \n
+           append IWOK_GLOBALS(PRM,Modify,edlbuf) "@endif\;"
+       } else {
+           append IWOK_GLOBALS(PRM,Modify,edlbuf) "$action $pnam $assign \"$value\"\;" 
+       }
+    }
+
+    if { $IWOK_GLOBALS(PRM,Modify,oneshot) == 1 } {
+       append IWOK_GLOBALS(PRM,Modify,edlbuf) \n "@endif\;"
+    }
+
+    if { $IWOK_GLOBALS(PRM,Modify,verbose) == 1 } {
+       append IWOK_GLOBALS(PRM,Modify,edlbuf) \n "@verboseoff;"
+    }
+
+    wokReadString $IWOK_GLOBALS(PRM,Modify,text) $IWOK_GLOBALS(PRM,Modify,edlbuf)
+    $IWOK_GLOBALS(PRM,Modify,labfil)  configure -text "Will write in file           : "
+    $IWOK_GLOBALS(PRM,Modify,entfil)  configure -relief sunken
+    return
+}
+
+proc wokPRM:test_wrkst { } {
+    global IWOK_GLOBALS
+    set l {}
+    foreach x [array names IWOK_GLOBALS PRM,Modify,wrkst,*] {
+       if { "$IWOK_GLOBALS($x)" == "1" } {
+           lappend l "%Station == \"[lindex [split $x ,] end]\"" ||
+       }
+    }
+    if { $l != {}} {
+       return [join [lrange $l 0 [expr { [llength $l] - 2 }]] ]
+    } else {
+       return 1
+    }
+}
+
+proc wokPRM:test_dbms { } {
+    global IWOK_GLOBALS
+    set l {}
+    foreach x [array names IWOK_GLOBALS PRM,Modify,dbms,*] {
+       if { "$IWOK_GLOBALS($x)" == "1" } {
+           lappend l "%DBMS == \"[lindex [split $x ,] end]\"" ||
+       }
+    }
+    if { $l != {}} {
+       return [join [lrange $l 0 [expr { [llength $l] - 2 }]] ]
+    } else {
+       return 1
+    }
+}
+
+proc wokPRM:ApplyModif { option } {
+    global IWOK_GLOBALS
+    switch -- $option {
+       W {
+           if [file exists $IWOK_GLOBALS(PRM,Modify,file)] {
+               set retval [wokDialBox .wokprm {File already exists} "File already exists." \
+                       warning 1 {Overwrite} {Abort}]
+               if { $retval } {
+                   $IWOK_GLOBALS(PRM,Modify,labfil)  configure -text "Abort...                       "
+                   return
+               } 
+           }
+           wokTextToFile $IWOK_GLOBALS(PRM,Modify,text) $IWOK_GLOBALS(PRM,Modify,file)
+           $IWOK_GLOBALS(PRM,Modify,labfil)  configure -text "Created file                 : "
+           $IWOK_GLOBALS(PRM,Modify,labfil)  configure -relief sunken
+       }
+
+       A {
+           set l {}
+           if [file exists $IWOK_GLOBALS(PRM,Modify,file)] {
+               foreach ln [wokUtils:FILES:FileToList  $IWOK_GLOBALS(PRM,Modify,file)] {
+                   lappend l $ln
+               }
+           } 
+           foreach x [wokTextToList $IWOK_GLOBALS(PRM,Modify,text)] {
+               lappend l $x
+           }
+           wokUtils:FILES:ListToFile $l $IWOK_GLOBALS(PRM,Modify,file)
+           $IWOK_GLOBALS(PRM,Modify,labfil)  configure -text "Appended to file             : "
+           $IWOK_GLOBALS(PRM,Modify,entfil)  configure -relief sunken
+       }
+    }
+    
+    if { [info exists IWOK_GLOBALS(PRM,ByClass,AllParams)] } {
+       if { [lsearch $IWOK_GLOBALS(PRM,ByClass,AllParams) $IWOK_GLOBALS(PRM,Modify,pnam)] == -1 } {
+           lappend IWOK_GLOBALS(PRM,ByClass,AllParams) $IWOK_GLOBALS(PRM,Modify,pnam)
+       }
+    }
+    wokclose
+
+    return
+}
+
+proc wokPRM:CancelModif { } {
+    global IWOK_GLOBALS
+    catch { unset  IWOK_GLOBALS(PRM,Modify,edlbuf) }
+    set    IWOK_GLOBALS(PRM,Modify,name)   "" 
+    set    IWOK_GLOBALS(PRM,Modify,value)  ""
+    set    IWOK_GLOBALS(PRM,Modify,append) ""
+    set    IWOK_GLOBALS(PRM,Modify,file)   ""
+    $IWOK_GLOBALS(PRM,Modify,text) delete 1.0 end
+    return
+}
+
+proc wokPRM:ModifyParam { param } {
+    global IWOK_GLOBALS
+    $IWOK_GLOBALS(PRM,Modify,compl) delete 0 end
+    if [info exists IWOK_GLOBALS(PRM,ByClass,AllParams,$param)] {
+       set IWOK_GLOBALS(PRM,Modify,value) $IWOK_GLOBALS(PRM,ByClass,AllParams,$param)
+    } else {
+       set IWOK_GLOBALS(PRM,Modify,value) ""
+    }
+    return
+}
+
+proc wokPRM:InitCompletionModify { w } {
+    global IWOK_GLOBALS
+    if ![info exists IWOK_GLOBALS(PRM,ByClass,InitCompletionByParams)] {
+       tixBusy $w on
+       update
+       wokPRM:InitCompletionByClass $w
+       set IWOK_GLOBALS(PRM,ByClass,AllParams) [wokPRM:LoadByParam $IWOK_GLOBALS(PRM,ByClass,AllClasses)]
+       set IWOK_GLOBALS(PRM,ByClass,InitCompletionByParams) done
+       tixBusy $w off
+    }
+    set IWOK_GLOBALS(PRM,CompletionType) Modify
+    return
+}
+
+proc wokPRM:AffLocModify { ret } {
+    global IWOK_GLOBALS
+    if { $ret != {} } {
+       $IWOK_GLOBALS(PRM,Modify,entnam) delete 0 end
+       $IWOK_GLOBALS(PRM,Modify,entnam) insert 0 $ret
+    }
+    return
+}
+
+proc wokPRM:CompleteModify { str } {
+    set lent [wokPRM:GetELByParam]
+    set retcomp [wokUtils:LIST:POF $str $lent]
+    set comp [lindex $retcomp 0]
+    set newaff [lindex $retcomp 1]
+    set lcomp [llength $newaff]
+
+    if { $lcomp == 1 } {
+       return ${comp}
+    }
+    
+    if { $lcomp != 0  } {
+       wokPRM:AffEntModify $newaff
+       return ${comp}
+    }
+    
+    if { $lcomp == 0 } {
+       wokPRM:AffEntModify ___NoMatch___
+       return {}
+    }
+}
+
+proc wokPRM:AffEntModify  { l } {
+    global IWOK_GLOBALS
+    $IWOK_GLOBALS(PRM,Modify,compl) delete 0 end
+    if { "$l" == "___NoMatch___" } {
+       $IWOK_GLOBALS(PRM,Modify,compl) insert end "No match."
+    } else {
+       foreach s $l {
+           $IWOK_GLOBALS(PRM,Modify,compl) insert end $s
+       }
+    }
+    return
+}
+
+
+
+;#
+;#           (((((((((( B Y C L A S S ))))))))))
+;#
+proc wokPRM:ByClass { adr nb page } {
+    global IWOK_GLOBALS
+    
+    set w [$nb subwidget $page]
+
+    frame $w.top -relief sunken -bd 1 
+
+    tixPanedWindow $w.top.pane -orient horizontal  -paneborderwidth 0 -separatorbg gray50
+    pack $w.top.pane -side top -expand yes -fill both -padx 1 -pady 1
+
+    set p1 [$w.top.pane add tree -min 250 -size  300]
+    set tree  [tixTree  $p1.tree -options {separator "^" hlist.selectMode single }]
+    pack $p1.tree -expand yes -fill both -padx 1 -pady 1
+    $tree config -browsecmd "wokPRM:BrowseByClass $w $tree" -opencmd "wokPRM:OpenByClass $tree"
+
+    set p2 [$w.top.pane add fram]
+    set fram [frame $p2.fram]
+    pack $p2.fram  -expand yes -fill both -padx 1 -pady 1
+
+    tixLabelEntry $fram.cla  -label "Class name        :"  -labelside left -options {
+       label.anchor w
+       entry.width 35
+    }
+
+    tixLabelEntry $fram.nam  -label "Parameter name    :"  -labelside left -options {
+       label.anchor w
+       entry.width 35
+    }
+
+    tixLabelEntry $fram.val  -label "Parameter value   :"  -labelside left -options {
+       label.anchor w
+       entry.width 35
+    }
+    
+    tixComboBox  $fram.fil  \
+           -variable IWOK_GLOBALS(PRM,ByClass,file) \
+           -command wokPRM:EdlTexte -label "Defined in file(s):" \
+           -editable false -labelside left \
+           -history 1 -prunehistory 1 
+
+    $fram.fil subwidget label configure -anchor w -font $IWOK_GLOBALS(font)
+    $fram.fil subwidget entry configure -width 35
+
+    tixScrolledListBox $fram.cmp -command wokPRM:Selected  
+
+    tixScrolledText $fram.txt  ; $fram.txt subwidget text  config -font $IWOK_GLOBALS(font)
+
+    tixForm $fram.cla -top 1c -left 1m -right %75
+    tixForm $fram.nam -top 2c -left 1m -right %75
+    tixForm $fram.val -top 3c -left 1m -right %75 
+    tixForm $fram.fil -top 4c -left 1m -right %75
+
+    tixForm $fram.cmp -top 1c -left $fram.fil -top 1c -bottom $fram.txt -right %99
+    tixForm $fram.txt -top 5c -left 2 -right %99 -bottom %99
+    
+    tixForm $w.top -top 2  -left 2 -right %99 -bottom %99
+
+    set IWOK_GLOBALS(PRM,ByClass,tree)   $tree
+    set IWOK_GLOBALS(PRM,ByClass,hlist)  [$tree subwidget hlist]
+
+    [set IWOK_GLOBALS(PRM,ByClass,labcla) [$fram.cla subwidget label]] config -font $IWOK_GLOBALS(font)
+    set IWOK_GLOBALS(PRM,ByClass,entcla)  [$fram.cla subwidget entry]
+    
+    [set IWOK_GLOBALS(PRM,ByClass,labnam) [$fram.nam subwidget label]] config -font $IWOK_GLOBALS(font)
+    set IWOK_GLOBALS(PRM,ByClass,entnam)  [$fram.nam subwidget entry]
+    
+    [set IWOK_GLOBALS(PRM,ByClass,labval) [$fram.val subwidget label]] config -font $IWOK_GLOBALS(font)
+    set IWOK_GLOBALS(PRM,ByClass,entval)  [$fram.val subwidget entry]
+
+    set IWOK_GLOBALS(PRM,ByClass,boxfil)   $fram.fil 
+    [set IWOK_GLOBALS(PRM,ByClass,labfil) [$fram.fil subwidget label]] config -font $IWOK_GLOBALS(font)
+    [set IWOK_GLOBALS(PRM,ByClass,entfil) [$fram.fil subwidget entry]
+    [set IWOK_GLOBALS(PRM,ByClass,lstfil) [$fram.fil subwidget listbox]
+
+    $IWOK_GLOBALS(PRM,ByClass,entcla) config -text IWOK_GLOBALS(PRM,ByClass,class)
+    $IWOK_GLOBALS(PRM,ByClass,entnam) config -text IWOK_GLOBALS(PRM,ByClass,name)
+    $IWOK_GLOBALS(PRM,ByClass,entval) config -text IWOK_GLOBALS(PRM,ByClass,value)
+
+    set IWOK_GLOBALS(PRM,ByClass,compl) [$fram.cmp subwidget listbox]
+
+    set IWOK_GLOBALS(PRM,ByClass,text) [$fram.txt subwidget text]
+
+    wokPRM:InitCompletionByClass $w
+    wokPRM:FillByClass
+
+    ;# completions des noms de classe
+    ;#
+    bind  $IWOK_GLOBALS(PRM,ByClass,entcla) <space> {
+       wokPRM:InitCompletionByClass %W
+       wokPRM:AffLocByClass [wokPRM:CompleteByClass [wokUtils:EASY:sb [%W get]]]
+    }
+    bind  $IWOK_GLOBALS(PRM,ByClass,entcla) <Return> {
+       wokPRM:AddByClass [wokUtils:EASY:sb [%W get]]
+    }
+
+    ;# completions des noms de parametres
+    ;#
+    bind $IWOK_GLOBALS(PRM,ByClass,entnam) <space> {
+       wokPRM:InitCompletionByParams %W
+       wokPRM:AffLocByParam [wokPRM:CompleteByParam [wokUtils:EASY:sb [%W get]]]
+    }
+
+    bind $IWOK_GLOBALS(PRM,ByClass,entnam) <Return> {
+       wokPRM:AddByParam [wokUtils:EASY:sb [%W get]]
+    }
+
+    return
+
+}
+
+proc wokPRM:InitCompletionByClass { w } {
+    global IWOK_GLOBALS
+    set IWOK_GLOBALS(PRM,CompletionType) ByClass
+    if ![info exists IWOK_GLOBALS(PRM,ByClass,InitCompletionByClass)] {
+       tixBusy $w on
+       set IWOK_GLOBALS(PRM,ByClass,AllClasses) [wokPRM:LoadByClass]
+       set IWOK_GLOBALS(PRM,ByClass,InitCompletionByClass) done
+       tixBusy $w off
+    }
+    return
+}
+
+proc wokPRM:InitCompletionByParams { w } {
+    global IWOK_GLOBALS
+    if ![info exists IWOK_GLOBALS(PRM,ByClass,InitCompletionByParams)] {
+       tixBusy $w on
+       update
+       wokPRM:InitCompletionByClass $w
+       set IWOK_GLOBALS(PRM,ByClass,AllParams) [wokPRM:LoadByParam $IWOK_GLOBALS(PRM,ByClass,AllClasses)]
+       set IWOK_GLOBALS(PRM,ByClass,InitCompletionByParams) done
+       tixBusy $w off
+    }
+    set IWOK_GLOBALS(PRM,CompletionType) ByParam
+    return
+}
+#
+# insert dans la ComBoBox.listbox la liste des fichiers definissant class. 
+#                ComBoBox.entry  le premier d'entre eux. ( declenche l'insertion du texte )
+#
+proc wokPRM:InsertDEFByClass { class } {
+    global IWOK_GLOBALS
+    if [info exists IWOK_GLOBALS(PRM,ByClass,AllClasses,$class)] {
+       set lf [wokUtils:LIST:union $IWOK_GLOBALS(PRM,ByClass,AllClasses,$class) [wokparam -F $class]]
+       set IWOK_GLOBALS(PRM,ByClass,file) [lindex $lf 0]
+       $IWOK_GLOBALS(PRM,ByClass,lstfil) delete 0 end
+       foreach f [lrange $lf 1 end] {
+          $IWOK_GLOBALS(PRM,ByClass,lstfil) insert end $f 
+       }
+    } 
+    return 
+}
+#
+#
+#
+proc wokPRM:CleanByClass { widgets } {
+    global IWOK_GLOBALS
+    if { "$widgets" == "ALL" } {
+       set widgets [list text entcla entnam entval entfil compl]
+    }
+    foreach w $widgets {
+       switch -- $w {
+           text {
+               $IWOK_GLOBALS(PRM,ByClass,text) delete 1.0 end
+           }
+           entcla {
+               set IWOK_GLOBALS(PRM,ByClass,class) ""
+           }
+           entnam {
+               set IWOK_GLOBALS(PRM,ByClass,name)  ""
+           }
+           entval {
+               set IWOK_GLOBALS(PRM,ByClass,value) ""
+           }
+           entfil {
+               $IWOK_GLOBALS(PRM,ByClass,boxfil) configure -disablecallback true
+               set IWOK_GLOBALS(PRM,ByClass,file) ""
+               $IWOK_GLOBALS(PRM,ByClass,lstfil) delete 0 end
+               $IWOK_GLOBALS(PRM,ByClass,boxfil) configure -disablecallback false 
+           }
+
+           compl {
+               $IWOK_GLOBALS(PRM,ByClass,compl) delete 0 end
+           }
+       }
+    }
+    update
+    return
+}
+;#
+;# appele dans la listbox des completions
+;#
+proc wokPRM:Selected {  } {
+   
+    global IWOK_GLOBALS
+    
+    switch -- $IWOK_GLOBALS(PRM,CompletionType) {
+       
+       ByClass {
+           set sl [$IWOK_GLOBALS(PRM,ByClass,compl) curselection]
+           if { "$sl" != "" } {
+               set class [$IWOK_GLOBALS(PRM,ByClass,compl) get $sl]
+               if { "$class" != "" } {
+                   set IWOK_GLOBALS(PRM,ByClass,class) $class
+                   wokPRM:AddByClass $class
+               }
+           }
+       }
+       
+       ByParam {
+           set sl [$IWOK_GLOBALS(PRM,ByClass,compl) curselection]
+           if { "$sl" != "" } {
+               set param [$IWOK_GLOBALS(PRM,ByClass,compl) get $sl]
+               if { "$param" != "" } {
+                   set IWOK_GLOBALS(PRM,ByClass,name) $param
+                   wokPRM:AddByParam $param
+               }
+           }
+       }
+       
+       Modify {
+           set sl [$IWOK_GLOBALS(PRM,Modify,compl) curselection]
+           if { "$sl" != "" } {
+               set param [$IWOK_GLOBALS(PRM,Modify,compl) get $sl]
+               if { "$param" != "" } {
+                   set IWOK_GLOBALS(PRM,Modify,name) $param 
+                   wokPRM:ModifyParam $param
+               }
+           }
+       }
+       
+    }
+    return
+}
+
+;#
+;# Completions sur les noms de classe
+;#
+proc wokPRM:CompleteByClass { str } {
+    set lent [wokPRM:GetELByClass]
+    set retcomp [wokUtils:LIST:POF $str $lent]
+    set comp [lindex $retcomp 0]
+    set newaff [lindex $retcomp 1]
+    set lcomp [llength $newaff]
+
+    if { $lcomp == 1 } {
+       return ${comp}
+    }
+    
+    if { $lcomp != 0  } {
+       wokPRM:AffEntByClass $newaff
+       return ${comp}
+    }
+    
+    if { $lcomp == 0 } {
+       wokPRM:AffEntByClass ___NoMatch___
+       return {}
+    }
+}
+
+;#
+;# Completions sur les noms de classe
+;#
+proc wokPRM:CompleteByParam { str } {
+    set lent [wokPRM:GetELByParam]
+    set retcomp [wokUtils:LIST:POF $str $lent]
+    set comp [lindex $retcomp 0]
+    set newaff [lindex $retcomp 1]
+    set lcomp [llength $newaff]
+
+    if { $lcomp == 1 } {
+       return ${comp}
+    }
+    
+    if { $lcomp != 0  } {
+       wokPRM:AffEntByClass $newaff
+       return ${comp}
+    }
+    
+    if { $lcomp == 0 } {
+       wokPRM:AffEntByClass ___NoMatch___
+       return {}
+    }
+}
+
+;#
+;# Completions sur les noms de classe
+;#
+proc wokPRM:AffEntByClass { l } {
+    global IWOK_GLOBALS
+    $IWOK_GLOBALS(PRM,ByClass,compl) delete 0 end
+    if { "$l" == "___NoMatch___" } {
+       $IWOK_GLOBALS(PRM,ByClass,compl) insert end "No match."
+    } else {
+       foreach s $l {
+           $IWOK_GLOBALS(PRM,ByClass,compl) insert end $s
+       }
+    }
+    return
+}
+;#
+;# Completions sur les noms de parametres
+;#
+proc wokPRM:AffEntByParam { l } {
+    global IWOK_GLOBALS
+    $IWOK_GLOBALS(PRM,ByClass,compl) delete 0 end
+    if { "$l" == "___NoMatch___" } {
+       $IWOK_GLOBALS(PRM,ByClass,compl) insert end "No match."
+    } else {
+       foreach s $l {
+           $IWOK_GLOBALS(PRM,ByClass,compl) insert end $s
+       }
+    }
+    return
+}
+
+;#
+;# Completions sur les noms de classe
+;#
+proc wokPRM:AffLocByClass { ret } {
+    global IWOK_GLOBALS
+    if { $ret != {} } {
+       $IWOK_GLOBALS(PRM,ByClass,entcla) delete 0 end
+       $IWOK_GLOBALS(PRM,ByClass,entcla) insert 0 $ret
+    }
+    return
+}
+;#
+;# Completions sur les noms de classe
+;#
+proc wokPRM:AffLocByParam { ret } {
+    global IWOK_GLOBALS
+    if { $ret != {} } {
+       $IWOK_GLOBALS(PRM,ByClass,entnam) delete 0 end
+       $IWOK_GLOBALS(PRM,ByClass,entnam) insert 0 $ret
+    }
+    return
+}
+;#
+;# Completions sur les noms de classe
+;#
+proc wokPRM:GetELByClass { } {
+    global IWOK_GLOBALS
+    return [lsort $IWOK_GLOBALS(PRM,ByClass,AllClasses)]
+}
+;#
+;# Completions sur les noms de classe
+;#
+proc wokPRM:GetELByParam { } {
+    global IWOK_GLOBALS
+    return [lsort $IWOK_GLOBALS(PRM,ByClass,AllParams)]
+}
+;#
+;#  Appel declenche par le changement de valeur de la ComboBox
+;#
+proc wokPRM:EdlTexte { edlfile } {
+    global IWOK_GLOBALS
+    if { "$edlfile" != "" } {
+       $IWOK_GLOBALS(PRM,ByClass,boxfil) addhistory $edlfile
+       wokReadFile $IWOK_GLOBALS(PRM,ByClass,text) $edlfile
+       wokPRM:HiLiByClass
+    }
+    return
+}
+;#
+;# 
+;#
+proc wokPRM:AddByClass  { class } {
+    global IWOK_GLOBALS
+    set hlist $IWOK_GLOBALS(PRM,ByClass,hlist)
+
+    foreach e [$hlist info children] {
+       set ldata [lindex [$hlist info data $e] 1]
+       if { [lsearch $ldata $class] != -1 } {
+           wokPRM:OpenByClass $IWOK_GLOBALS(PRM,ByClass,tree) $e
+           $IWOK_GLOBALS(PRM,ByClass,tree) setmode $e close
+           wokPRM:OpenByClass $IWOK_GLOBALS(PRM,ByClass,tree) ${e}^${class}
+           $IWOK_GLOBALS(PRM,ByClass,tree) setmode ${e}^${class} close
+           wokPRM:CleanByClass [list  entnam entval text] 
+           set IWOK_GLOBALS(PRM,ByClass,class) $class
+           wokPRM:InsertDEFByClass $class
+           wokPRM:SeeMe ${e}^${class}
+           return
+       }
+    }
+    return
+}
+;#
+;#
+;#
+proc wokPRM:AddByParam { param } {
+    global IWOK_GLOBALS
+    set hlist $IWOK_GLOBALS(PRM,ByClass,hlist)
+    set class [string range [wokPRM:ClassName $param] 1 end] ;# (retirer le %)
+
+    foreach e [$hlist info children] {
+       set ldata [lindex [$hlist info data $e] 1]
+       if { [lsearch $ldata $class] != -1 } {
+           wokPRM:OpenByClass $IWOK_GLOBALS(PRM,ByClass,tree) $e
+           $IWOK_GLOBALS(PRM,ByClass,tree) setmode $e close
+           wokPRM:OpenByClass $IWOK_GLOBALS(PRM,ByClass,tree) ${e}^${class}
+           $IWOK_GLOBALS(PRM,ByClass,tree) setmode ${e}^${class} close
+           set IWOK_GLOBALS(PRM,ByClass,class) $class
+           wokPRM:InsertDEFByClass $class
+           set IWOK_GLOBALS(PRM,ByClass,name) $param
+           set IWOK_GLOBALS(PRM,ByClass,value) [lindex [$hlist info data ${e}^${class}^${param}] 2]
+           wokPRM:SeeMe ${e}^${class}^${param}
+           wokPRM:HiLiByClass
+           return
+       }
+    }
+    return
+}
+;#
+;#
+;#
+proc wokPRM:FillByClass { } {
+    global IWOK_GLOBALS
+    set hlist $IWOK_GLOBALS(PRM,ByClass,hlist)
+    $hlist delete all
+    foreach name [lsort [array names IWOK_GLOBALS PRMDSC,*]] {
+       if { "$name" != "PRMDSC,DefaultFamilies" } {
+           $hlist add ${name} -itemtype imagetext -style $IWOK_GLOBALS(PRM,Description) \
+                   -text [lindex [split $name ,] 1] \
+                   -data [list F $IWOK_GLOBALS($name)]
+           $IWOK_GLOBALS(PRM,ByClass,tree) setmode ${name} open
+       }
+    }
+
+    set all $IWOK_GLOBALS(PRM,ByClass,AllClasses)
+    set def $IWOK_GLOBALS(PRMDSC,DefaultFamilies)
+    set lothers [lsort [wokUtils:LIST:moins $all $def]]
+    $hlist add  __Others__  -itemtype imagetext -style $IWOK_GLOBALS(PRM,Description) \
+           -text "Others..." -data [list F $lothers]
+    $IWOK_GLOBALS(PRM,ByClass,tree) setmode __Others__ open
+    return
+}
+;#
+;# retourne le nom dec la classe a partir de string 
+;#
+proc wokPRM:ClassName { string } {
+    if [regexp {(^[^_]*)_(.*)} $string all class rest] {
+       return $class
+    } else {
+       ;#msgprint -w "Unknown syntax for a class name : $string"
+       return $string
+    }
+}
+#
+# retourne une table avec toutes les classses et l'adresse des edls correspondants.
+#
+proc wokPRM:GetAllClasses { table } {
+    upvar $table TLOC
+    catch {unset TLOC}
+    foreach d [wokparam -L] {
+       foreach e [glob -nocomplain $d/*.edl] {
+           set cname [wokPRM:ClassName [file root [file tail $e]]]
+           if [info exists TLOC($cname)] {
+               set i $TLOC($cname)
+               lappend i $e
+               set TLOC($cname) $i
+           } else {
+               set TLOC($cname) $e
+           }
+       }
+    }
+    return
+}
+#
+# retourne une table avec tous les parametres des lclasses  et leur valeur
+#
+proc wokPRM:GetAllParams { lclasses table } {
+    upvar $table TLOC
+    catch {unset TLOC}
+    foreach class $lclasses {
+       foreach p [wokparam -l $class] {
+           if [regexp {^%.*} $p] { 
+               set x [split $p =]
+               set TLOC([lindex $x 0]) [lindex $x 1]
+           }
+       }
+    }
+    return
+}
+;#
+;#
+;#
+proc wokPRM:LoadByParam { l } {
+    global IWOK_GLOBALS
+    catch { unset table }
+    wokPRM:GetAllParams $l table
+    wokUtils:EASY:MAD IWOK_GLOBALS PRM,ByClass,AllParams table
+    return [lsort [array names table]]
+}
+;#
+;#
+;#
+proc wokPRM:LoadByClass { } {
+    global IWOK_GLOBALS
+    catch { unset table }
+    wokPRM:GetAllClasses table
+    wokUtils:EASY:MAD IWOK_GLOBALS PRM,ByClass,AllClasses table
+    return [lsort [array names table]]
+}
+;#
+;# appelee a l'ouverture d'un item: Le remplit avec les fichiers de l'UD.
+;#
+proc wokPRM:OpenByClass { tree ent } {
+    global IWOK_GLOBALS
+    set hlist [$tree subwidget hlist]
+    tixBusy $IWOK_GLOBALS(PRM,toplevel) on
+    update
+    if {[$hlist info children $ent] == {}} {
+       set dat [$hlist info data $ent] 
+       set data [lindex $dat  1]
+       switch -- [lindex $dat 0] {
+           F  {
+               foreach c $data {
+                  $hlist add $ent^$c -itemtype imagetext -style $IWOK_GLOBALS(PRM,Description) \
+                          -text $c -data [list C $c]
+                   $tree setmode $ent^$c open
+               }
+               wokPRM:CleanByClass ALL
+           }
+
+           C {
+               catch {
+                   foreach p [lsort [wokparam -l $data]] {
+                       if [regexp {^%.*} $p] { 
+                           set x [split $p =]
+                           set name [lindex $x 0]
+                           set value [lindex $x 1]
+                           $hlist add $ent^$name  -itemtype imagetext -text $name -data [list P $name $value]
+                       }
+                   }
+               }
+               wokPRM:CleanByClass [list entnam entval compl]
+           }
+
+       }
+       
+    }
+    tixBusy $IWOK_GLOBALS(PRM,toplevel) off
+    foreach kid [$hlist info children $ent] {
+       $hlist show entry $kid
+    }
+
+    return
+}
+
+#
+# appelee quand on brouze la liste.
+#
+proc wokPRM:BrowseByClass {  w slb args } {
+    global IWOK_GLOBALS
+    set hlist [$slb subwidget hlist]
+
+    set ent   [$hlist info anchor]
+    if {$ent == ""} {
+       return
+    }
+
+    set kid [$hlist info children $ent]
+    if {$kid == {} } {
+       set fullitem [$hlist info data $ent]
+       tixBusy $IWOK_GLOBALS(PRM,toplevel) on
+       switch -- [lindex $fullitem 0] {
+           
+           C {
+               set class [lindex $fullitem 1]
+               set IWOK_GLOBALS(PRM,ByClass,class) $class
+               wokPRM:InsertDEFByClass $class
+           }
+
+           P {
+               set class [lindex [$hlist info data [$hlist info parent $ent]] 1]
+               if { "$IWOK_GLOBALS(PRM,ByClass,class)" != "$class" } {
+                   set IWOK_GLOBALS(PRM,ByClass,class) $class
+                   wokPRM:InsertDEFByClass $class
+               }
+
+               set IWOK_GLOBALS(PRM,ByClass,name)  [lindex $fullitem 1]
+               set IWOK_GLOBALS(PRM,ByClass,value) [lindex $fullitem 2]
+
+               wokPRM:HiLiByClass
+           }
+       }
+       tixBusy $IWOK_GLOBALS(PRM,toplevel) off
+    }
+    return
+}
+;#
+;# surligne dans le texte le parametre en cours si il y en a un
+;#
+proc wokPRM:HiLiByClass { } {
+    global IWOK_GLOBALS
+    if { "$IWOK_GLOBALS(PRM,ByClass,name)" != "" } {
+       catch {
+           $IWOK_GLOBALS(PRM,ByClass,text) tag delete big
+           wokFAM $IWOK_GLOBALS(PRM,ByClass,text) $IWOK_GLOBALS(PRM,ByClass,name) \
+                   { $IWOK_GLOBALS(PRM,ByClass,text) tag add big first last }
+           $IWOK_GLOBALS(PRM,ByClass,text) tag configure big -background orange \
+                   -foreground black -borderwidth 2 \
+                   -font -Adobe-Helvetica-Medium-R-Normal--*-120-* -relief raised
+           set index [$IWOK_GLOBALS(PRM,ByClass,text) search \
+                   -exact $IWOK_GLOBALS(PRM,ByClass,name) 1.0]
+           $IWOK_GLOBALS(PRM,ByClass,text) see $index 
+       }
+    }
+    return
+}
+;#
+;#
+;#
+proc wokPRM:SeeMe { entry } {
+    global IWOK_GLOBALS
+    $IWOK_GLOBALS(PRM,ByClass,hlist) selection clear
+    $IWOK_GLOBALS(PRM,ByClass,hlist) anchor clear
+    $IWOK_GLOBALS(PRM,ByClass,hlist) anchor set $entry
+    $IWOK_GLOBALS(PRM,ByClass,hlist) selection set $entry
+    $IWOK_GLOBALS(PRM,ByClass,hlist) see $entry
+    return
+}
+
+;#
+;# Init des familles de classes
+;#
+proc wokPRMInitDescriptionByClass { location } {
+    global IWOK_GLOBALS
+    set IWOK_GLOBALS(PRMDSC,DefaultFamilies) [concat \
+           [set IWOK_GLOBALS(PRMDSC,Compilations)     [list CMPLRS OBJSCMPLRS]]\
+           [set IWOK_GLOBALS(PRMDSC,Links/Shareables/Archives) [list LD LDSHR LDEXE ARX LDAR ]]\
+           [set IWOK_GLOBALS(PRMDSC,Unit-description)          [list FILENAME]]\
+           [set IWOK_GLOBALS(PRMDSC,BD/Extractors)             [list TCPP CODEGEN CPPENG]]\
+           [set IWOK_GLOBALS(PRMDSC,Building-steps)            [list WOKSteps WOKStepsDFLT ]]\
+           [set IWOK_GLOBALS(PRMDSC,Environnement)             [list COMMAND ENV]]\
+           [set IWOK_GLOBALS(PRMDSC,Current-location)          [wokparam -C $location]]\
+           ]
+    return
+} 
+
+proc wokPRM:DBGByClass { {root {}} } {
+    global IWOK_GLOBALS
+    set hli $IWOK_GLOBALS(PRM,ByClass,hlist)
+    foreach c [$hli info children $root] {
+       puts "$c : data <[$hli info data $c]>"
+       wokPRM:DBGByClass $c
+    }
+    return
+}
+;#
+;#           ((((((((((( B Y F I L E )))))))))))
+;#
+;#
+proc wokPRM:ByFile { adr nb page } {
+    global IWOK_GLOBALS
+    
+    set w [$nb subwidget $page]
+
+    frame $w.top -relief sunken -bd 1 
+
+    tixPanedWindow $w.top.pane -orient horizontal  -paneborderwidth 0 -separatorbg gray50
+    pack $w.top.pane -side top -expand yes -fill both -padx 1 -pady 1
+
+    set p1 [$w.top.pane add tree -min 250 -size  380]
+    set tree  [tixTree  $p1.tree -options {separator "^" hlist.selectMode single }]
+    pack $p1.tree -expand yes -fill both -padx 1 -pady 1
+    $tree config -browsecmd "wokPRM:BrowseByFile $w $tree" -opencmd "wokPRM:OpenByFile $tree"
+
+    set p2 [$w.top.pane add fram ]
+    set fram [frame $p2.fram]
+    pack $p2.fram  -expand yes -fill both -padx 1 -pady 1
+
+    tixLabelEntry $fram.cla  -label "Class name        :"  -labelside left -options {
+       label.anchor w
+       entry.width 35
+    }
+
+    tixLabelEntry $fram.nam  -label "Parameter name    :"  -labelside left -options {
+       label.anchor w
+       entry.width 35
+    }
+
+    tixLabelEntry $fram.val  -label "Parameter value   :"  -labelside left -options {
+       label.anchor w
+       entry.width 35
+    }
+
+    ;# mettre ici la date du fichier etc...
+    
+    tixScrolledText $fram.txt  
+
+    tixForm $fram.cla -top 1c -left 1m -right %75
+    tixForm $fram.nam -top 2c -left 1m -right %75
+    tixForm $fram.val -top 3c -left 1m -right %75 
+    tixForm $fram.txt -top 5c -left 2  -right %99 -bottom %99
+
+    tixForm $w.top -top 2  -left 2 -right %99 -bottom %99
+
+    set IWOK_GLOBALS(PRM,ByFile,tree)  $tree
+    set IWOK_GLOBALS(PRM,ByFile,hlist) [$tree subwidget hlist]
+
+    [set IWOK_GLOBALS(PRM,ByFile,labcla) [$fram.cla subwidget label]] config -font $IWOK_GLOBALS(font)
+    [set IWOK_GLOBALS(PRM,ByFile,entcla) [$fram.cla subwidget entry]] config -stat disabled
+
+    [set IWOK_GLOBALS(PRM,ByFile,labnam) [$fram.nam subwidget label]] config -font $IWOK_GLOBALS(font)
+    [set IWOK_GLOBALS(PRM,ByFile,entnam) [$fram.nam subwidget entry]] config -stat disabled
+
+    [set IWOK_GLOBALS(PRM,ByFile,labval) [$fram.val subwidget label]] config -font $IWOK_GLOBALS(font)
+    [set IWOK_GLOBALS(PRM,ByFile,entval) [$fram.val subwidget entry]] config -stat disabled
+
+    $IWOK_GLOBALS(PRM,ByFile,entcla) config -text IWOK_GLOBALS(PRM,ByFile,class)
+    $IWOK_GLOBALS(PRM,ByFile,entnam) config -text IWOK_GLOBALS(PRM,ByFile,name)
+    $IWOK_GLOBALS(PRM,ByFile,entval) config -text IWOK_GLOBALS(PRM,ByFile,value)
+
+    [set IWOK_GLOBALS(PRM,ByFile,text) [$fram.txt subwidget text]] config -font $IWOK_GLOBALS(font)
+
+    wokPRM:FillByFile
+    return
+}
+;#
+;# remplit la hlist avec les directories du search-path
+;#
+proc wokPRM:FillByFile { } {
+    global IWOK_GLOBALS
+    set hlist $IWOK_GLOBALS(PRM,ByFile,hlist)
+    $hlist delete all
+    set inx [llength [set lf [wokUtils:LIST:reverse [wokparam -L]]]]
+    foreach name $lf {
+       set directory $name
+       set entry $name
+       set text [format "(%-2s) %s" ${inx} ${directory}]
+       if { [llength [set ledl [glob -nocomplain $directory/*.edl]]] == 0  } {
+           append text (empty)
+       }
+       $hlist add $entry -itemtype imagetext -style $IWOK_GLOBALS(PRM,Description) \
+               -text $text \
+               -data [list D [lsort $ledl]]
+       $IWOK_GLOBALS(PRM,ByFile,tree) setmode $entry open
+       incr inx -1
+    }
+    return
+}
+proc wokPRM:OpenByFile { tree ent } {
+    global IWOK_GLOBALS
+    set hlist [$tree subwidget hlist]
+    tixBusy $IWOK_GLOBALS(PRM,toplevel) on
+    update
+    if {[$hlist info children $ent] == {}} {
+       set dat [$hlist info data $ent] 
+       set data [lindex $dat  1]
+       switch -- [lindex $dat 0] {
+           D  {
+               
+               set IWOK_GLOBALS(PRM,ByFile,value) ""
+               set IWOK_GLOBALS(PRM,ByFile,name)  ""
+               set IWOK_GLOBALS(PRM,ByFile,class) ""
+               foreach c $data {
+                   set t [file tail $c] 
+                   $hlist add $ent^$t -itemtype imagetext \
+                           -style $IWOK_GLOBALS(PRM,Description) \
+                           -text $t -data [list F $c]
+                   $tree setmode $ent^$t open
+               }
+               
+           }
+
+            F {
+               set IWOK_GLOBALS(PRM,ByFile,value) ""
+               set IWOK_GLOBALS(PRM,ByFile,name)  ""
+               set IWOK_GLOBALS(PRM,ByFile,class) [wokPRM:ClassName [file root [file tail $data]]]
+               wokReadFile $IWOK_GLOBALS(PRM,ByFile,text) $data
+               foreach p [wokPRM:ParamsInfile $data] {
+                   if ![$hlist info exists $ent^$p] {
+                       $hlist add $ent^$p -itemtype imagetext \
+                               -text $p -data [list P $p]
+                   }
+               }
+           }
+           
+
+            P  {
+             
+            }
+
+
+       }
+       
+    }
+    tixBusy $IWOK_GLOBALS(PRM,toplevel) off
+    foreach kid [$hlist info children $ent] {
+       $hlist show entry $kid
+    }
+
+    return
+}
+;#
+;# retourne la liste des parametres definis/ecrits dans file
+;# syntaxes reconnues : @set %KERNEL_SCCS = ...
+;#                      @string %SESSION_Adm  = ...
+;# retournera aussi le contenu entier du fichier ca ira plus vite
+;# le meme parametre peut etre plusieurs fois dans la liste.
+proc wokPRM:ParamsInfile { file } {
+    set synt_set {^[ ]*@set[ ]+(%[^ ]*)[ ]*=}
+    set synt_string {^[ ]*@string[ ]+(%[^ ]*)[ ]*=}
+    set lp {}
+    foreach str [wokUtils:FILES:FileToList $file] {
+       if { [regexp $synt_set $str all pname] || [regexp $synt_string $str all pname] } {
+           lappend lp $pname
+       }
+    }
+    return [lsort $lp]
+}
+proc wokPRM:BrowseByFile {  w slb args } {
+    global IWOK_GLOBALS
+    set hlist [$slb subwidget hlist]
+    
+    set ent   [$hlist info anchor]
+    if {$ent == ""} {
+       return
+    }
+
+    set kid [$hlist info children $ent]
+    if {$kid == {} } {
+       set fullitem [$hlist info data $ent]
+       set action [lindex $fullitem 0]
+       tixBusy $IWOK_GLOBALS(PRM,toplevel) on
+       switch -- $action {
+           
+           P {
+               set parent [lindex [$hlist info data [$hlist info parent $ent]] 1]
+               set IWOK_GLOBALS(PRM,ByFile,class) [wokPRM:ClassName [file root [file tail $parent]]]
+               set prm [lindex $fullitem 1]
+               set IWOK_GLOBALS(PRM,ByFile,name)  $prm
+               set IWOK_GLOBALS(PRM,ByFile,value) ""
+               catch {set IWOK_GLOBALS(PRM,ByFile,value) [wokparam -e $prm $IWOK_GLOBALS(PRM,location)]}
+               wokReadFile $IWOK_GLOBALS(PRM,ByFile,text) $parent
+               wokPRM:HiLiByFile
+           }
+
+       }
+       tixBusy $IWOK_GLOBALS(PRM,toplevel) off
+    }
+    return
+}
+;#
+;# surligne dans le texte le parametre en cours si il y en a un
+;#
+proc wokPRM:HiLiByFile { } {
+    global IWOK_GLOBALS
+    if { "$IWOK_GLOBALS(PRM,ByFile,name)" != "" } {
+       catch {
+           $IWOK_GLOBALS(PRM,ByFile,text) tag delete big
+           wokFAM $IWOK_GLOBALS(PRM,ByFile,text) $IWOK_GLOBALS(PRM,ByFile,name) \
+                   { $IWOK_GLOBALS(PRM,ByFile,text) tag add big first last }
+           $IWOK_GLOBALS(PRM,ByFile,text) tag configure big -background orange \
+                   -foreground black -borderwidth 2 \
+                   -font -Adobe-Helvetica-Medium-R-Normal--*-120-* -relief raised
+           set index [$IWOK_GLOBALS(PRM,ByFile,text) search \
+                   -exact $IWOK_GLOBALS(PRM,ByFile,name) 1.0]
+           $IWOK_GLOBALS(PRM,ByFile,text) see $index 
+       }
+    }
+    return
+}
+;#
+;#
+;#
+proc wokPRM:DBGByFile { {root {}} } {
+    global IWOK_GLOBALS
+    set hli $IWOK_GLOBALS(PRM,ByFile,hlist)
+    foreach c [$hli info children $root] {
+       puts "$c : data <[$hli info data $c]>"
+        wokPRM:DBGByFile $c
+    }
+    return
+}
+
+
+;#
+;#         (((((((  N O T E B O O K / H E L P / T O P L E V E L )))))))
+;#
+;# 
+;# 
+;#
+proc wokPRM:Scope { path location } {
+    return
+}
+
+;#
+;#  test existence
+;#
+proc wokPRM:Exists { } {
+    global IWOK_GLOBALS
+    return [info exists IWOK_GLOBALS(PRM,toplevel)] 
+}
+;#
+;# detruit le toplevel et unset les variables associees
+;#
+proc wokPRM:Kill { } {
+    global IWOK_GLOBALS
+    wokButton delw [list params $IWOK_GLOBALS(PRM,toplevel)]
+    catch { 
+       destroy $IWOK_GLOBALS(PRM,toplevel) 
+       destroy $IWOK_GLOBALS(PRM,help)
+    }
+    foreach var [array names IWOK_GLOBALS PRM,*] {
+       unset IWOK_GLOBALS($var) 
+    }
+    return
+}
+
+
+proc wokPRM:UPD { w } {
+    return
+}
+proc wokPRM:NOT { command adr w name } {
+    tixBusy $w on
+    set id [after 10000 tixBusy $w off]
+    $command $adr $w $name
+    after cancel $id
+    after 0 tixBusy $w off
+    return
+}
+;#
+;# Help
+;#
+proc wokPRM:Help { w } {
+    global IWOK_GLOBALS
+    global env
+    set whelp [wokHelp [set IWOK_GLOBALS(PRM,help) .wokPRMHelp] "About parameters "]
+    set texte [lindex $whelp 0] ; set label [lindex $whelp 1]
+    if {[info exist IWOK_GLOBALS(windows)]} {
+       if {[lsearch $IWOK_GLOBALS(windows) .wokPRMHelp ] == -1} {
+           lappend IWOK_GLOBALS(windows) .wokPRMHelp 
+       }
+    }
+    wokReadFile $texte  $env(WOK_LIBRARY)/wokPRM.hlp
+    wokFAM $texte <.*> { $texte tag add big first last }
+
+    $texte tag configure big -background Bisque3 -foreground black -borderwidth 2 \
+            -relief raised
+
+    $texte configure -state disabled
+    update
+    return   
+}
+
+