proc HTMLBoard {} {
foreach Ordre [GscopeBoard TitreBidon "PourGIF"] {
Espionne [join [DecoupeEnSousOrdresPourGif $Ordre] "\n"]
}
exit
}
proc TrouveDescription {NomComplet} {
global RepertoireDuGenome
set FichierNotes $RepertoireDuGenome/notes/$NomComplet
if {! [file exists $FichierNotes]} {
return [list "Infos for $NomComplet not found."]
}
return [LesLignesDuFichier $FichierNotes]
}
proc TGR {} {
lappend LesOrdres "create rectangle 3 5 10 10 -fill red"
Graphiste $LesOrdres 500 500 0 0 20 20 /home/wscope/toto.png
exit
}
proc ChargeOrdres {Couleur {FichierOrdres ""} {FichierIndexes ""} {FichierSignif ""}} {
global LesOrdresTries
global IndexesDesOrdres
global ListeDeBoites CouleurDuFond
# Positionne les variables LesOrdresTries et IndexesDesOrdres
if { ! [info exists LesOrdresTries($Couleur)] } {
if {[file exists $FichierOrdres]} {
set LesOrdresTries($Couleur) [LesLignesDuFichier $FichierOrdres]
} else {
SauveLesLignes [set LesOrdresTries($Couleur)] dans $FichierOrdres
}
}
if { ! [info exists IndexesDesOrdres] } {
if {[file exists $FichierIndexes]} {
set IndexesDesOrdresFormatFichier [LesLignesDuFichier $FichierIndexes]
foreach Ligne $IndexesDesOrdresFormatFichier {
scan $Ligne "%s %s %s" Indice Valeur BonneValeur
set IndexesDesOrdres($Indice) "$Valeur BonneValeur"
}
} else {
scan [BoundingBox [ListeDeBoites]] "%d %d" xDebut xFin
set xDebut [Maxi 1 [expr $xDebut-3000]]
incr xFin 1000
set ScalX [ expr 1024.0 / ( $xFin - $xDebut ) ]
set Pas [expr round ( ( 10*1024.0 / round ( 1.0 / $ScalX ) ) * ( $xFin - $xDebut ) / 1024.0 ) ]
set DebutCourant $xDebut
set FinCourant [expr $xDebut + $Pas]
set I 0
set IndexesDesOrdres($xDebut) "0 0"
foreach Ligne $LesOrdresTries($Couleur) {
if { [regexp {^create} $Ligne] } {
if {[info exists X1]} { unset X1 }
if {[info exists Y1]} { unset Y1 }
if {[info exists X2]} { unset X2 }
if {[info exists Y2]} { unset Y2 }
scan $Ligne "%s %s %f %f %f %f" Create Object X1 Y1 X2 Y2
set OnContinue 0
if { ! [info exists X2] } { set X2 $X1 }
if { ($X1 <= $DebutCourant && $DebutCourant < $X2) || \
($X1 <= $FinCourant && $FinCourant < $X2) || \
($DebutCourant < $X1 && $X2 <= $FinCourant) } {
set OnContinue 1
}
if { ! $OnALimiteMin && $X2 >= $FinCourant } {
set LimiteMin $I
set OnALimiteMin 1
}
if { ! $OnContinue } {
if { ! $OnALimiteMin } { set LimiteMin $DebutCourant }
set DebutCourant $FinCourant
set IndexesDesOrdres($DebutCourant) "$I $LimiteMin"
incr FinCourant $Pas
set OnALimiteMin 0
}
}
incr I
}
set ASauver {}
set LesIndexTries [lsort -integer [array names IndexesDesOrdres]]
foreach IndexCourant $LesIndexTries {
lappend ASauver "$IndexCourant [set IndexesDesOrdres($IndexCourant)]"
}
SauveLesLignes $ASauver dans $FichierIndexes
}
}
}
proc CreeSignifications {{K "OrdrePourGif"}} {
global SignificationEnStock
set Significations [GetSignification "ToutesLesCouleursPossibles" $K]
set listeAAfficher [list ""]
foreach Signif $Significations {
set TexteSignif [GetSignification $Signif $K]
lappend ListeAAfficher "$Signif : $TexteSignif"
}
return $ListeAAfficher
#SauveLesLignes $ListeAAfficher dans $FichierSignif
}
proc CreeOrdresTries {Couleur} {
global LesOrdresTries
global LimiteGauche LimiteDroite
scan [BoundingBox [ListeDeBoites]] "%d %d" xDebut xFin
set xDebut [Maxi 1 [expr $xDebut-3000]]
incr xFin 1000
set LimiteGauche $xDebut
set LimiteDroite $xFin
set LO [GscopeBoard titi PourGif]
RedefinirLaCouleur OrdrePourGif $Couleur
set LesOrdresTries($Couleur) [LesOrdresPourGif $LO]
return $LesOrdresTries($Couleur)
}
proc CreeIndexes {Couleur LesOrdres} {
global LesOrdresTries
global IndexesDesOrdres
if {! [info exists LesOrdresTries] } {
set LesOrdresTries($Couleur) $LesOrdres
}
scan [BoundingBox [ListeDeBoites]] "%d %d" xDebut xFin
set xDebut [Maxi 0 [expr $xDebut-3000]]
incr xFin 1000
set ScalX [ expr 1024.0 / ( $xFin - $xDebut ) ]
set Pas [expr round ( ( 10240.0 / round ( 1.0 / $ScalX ) ) * ( $xFin - $xDebut ) / 1024.0 ) ]
set DebutCourant $xDebut
set FinCourant [expr $xDebut + $Pas]
set I 0
set IndexesDesOrdres($xDebut) "0 0"
set OnALimiteMin 0
foreach Ligne $LesOrdresTries($Couleur) {
if { [regexp {^create} $Ligne] } {
if {[info exists X1]} { unset X1 }
if {[info exists Y1]} { unset Y1 }
if {[info exists X2]} { unset X2 }
if {[info exists Y2]} { unset Y2 }
scan $Ligne "%s %s %f %f %f %f" Create Object X1 Y1 X2 Y2
set OnContinue 0
if { ! [info exists X2] } { set X2 $X1 }
if { ($X1 <= $DebutCourant && $DebutCourant < $X2) || \
($X1 <= $FinCourant && $FinCourant < $X2) || \
($DebutCourant < $X1 && $X2 <= $FinCourant) } {
set OnContinue 1
}
if { ! $OnALimiteMin && $X2 >= $FinCourant } {
set LimiteMin $I
set OnALimiteMin 1
}
if { ! $OnContinue } {
if { ! $OnALimiteMin } { set LimiteMin $DebutCourant }
set DebutCourant $FinCourant
set IndexesDesOrdres($DebutCourant) "$I $LimiteMin"
incr FinCourant $Pas
set OnALimiteMin 0
}
}
incr I
}
set ASauver {}
set LesIndexTries [lsort -integer [array names IndexesDesOrdres]]
foreach IndexCourant $LesIndexTries {
lappend ASauver "$IndexCourant [set IndexesDesOrdres($IndexCourant)]"
}
lappend ASauver "$FinCourant [llength [set LesOrdresTries($Couleur)]] [llength [set LesOrdresTries($Couleur)]]"
return $ASauver
}
proc TesteIndexation {} {
scan [BoundingBox [ListeDeBoites]] "%d %d" xDebut xFin
set xDebut [Maxi 1 [expr $xDebut-3000]]
incr xFin 1000
set ScalX [ expr 1024.0 / ( $xFin - $xDebut ) ]
set Pas [expr round ( ( 10240.0 / round ( 1.0 / $ScalX ) ) * ( $xFin - $xDebut ) / 1024.0 ) ]
set DebutCourant $xDebut
set FinCourant [expr $xDebut + $Pas]
Espionne "$ScalX $xDebut $xFin $Pas"
ChargeOrdres "NombreDeCopainsDansBlast" ordrescomplets.txt indexes.txt signif.txt
LesOrdresEntrePositions "NombreDeCopainsDansBlast" [expr 1+5*$Pas] [expr 1+7*$Pas]
exit
}
proc LesOrdresEntreIndexes {Couleur Deb Fin} {
global LesOrdresTries
global IndexesDesOrdres
set LesOrdresAvecPeutEtreCanvas [lrange [set LesOrdresTries($Couleur)] $Deb $Fin]
if { [lsearch -regexp $LesOrdresAvecPeutEtreCanvas {^create canvas}] == -1} {
set DebutCanvas [lsearch -regexp $LesOrdresTries($Couleur) {^create canvas}]
set FinCanvas [lsearch -regexp $LesOrdresTries($Couleur) {^fin create canvas}]
set LesOrdresAvecPeutEtreCanvas [concat [lrange $LesOrdresTries($Couleur) $DebutCanvas $FinCanvas] $LesOrdresAvecPeutEtreCanvas]
}
# SauveLesLignes $LesOrdresAvecPeutEtreCanvas dans /home/wscope/wscope/forum/Espionne${Deb}${Fin}.txt
return $LesOrdresAvecPeutEtreCanvas
}
proc LesOrdresEntrePositions {Couleur xMin xMax} {
global IndexesDesOrdres
if {[info exists IndexesDesOrdres($xMin)] && [info exists IndexesDesOrdres($xMax)]} {
scan [set IndexesDesOrdres($xMin)] "%s %s" Bidon VraiMin
scan [set IndexesDesOrdres($xMax)] "%s %s" VraiMax Bidon
return [LesOrdresEntreIndexes $Couleur $VraiMin $VraiMax]
}
set LesBornesMin [lsort -integer [array names IndexesDesOrdres]]
set LesBornesMax [lrange $LesBornesMin 1 end]
set BonxMin [lindex $LesBornesMin 0]
set BonxMax [lindex $LesBornesMax end]
set XMaxAncien -999999
foreach m $LesBornesMin M $LesBornesMax {
if { $m <= $xMin } {
set BonxMin $m
}
if { $XMaxAncien <= $xMax && $xMax < $M } {
set BonxMax $M
break
}
set XMaxAncien $M
}
Espionne "$xMin $xMax $BonxMin $BonxMax"
if { ! [info exists BonxMin]} { return {} }
scan [set IndexesDesOrdres($BonxMin)] "%s %s" Bidon VraiMin
scan [set IndexesDesOrdres($BonxMax)] "%s %s" VraiMax Bidon
return [LesOrdresEntreIndexes $Couleur $VraiMin $VraiMax]
}
proc CreeLeFichierGIF {K LesOrdresPourGIF LaBoundingBox CheminGIF ListeDesDimensions } {
global CommandeCanvart
global GraphisteDir
if {[info exists SavantGraphiste] && $SavantGraphiste} {
SauveLesLignes $LesOrdresPourGIF dans "[RepertoireDeTravail]/lesordrespourgif"
QuestionDeScience Graphiste "exe ..."
} else {
if { ! [info exists CommandeCanvart]} {
set CommandeCanvart "java ImageDecoder2"
}
set X1 [lindex $LaBoundingBox 0]
set Y1 [lindex $LaBoundingBox 1]
set X2 [lindex $LaBoundingBox 2]
set Y2 [lindex $LaBoundingBox 3]
set ValWidth [lindex $ListeDesDimensions 0]
if { [llength $ListeDesDimensions]==1 } {
set ValHeight [expr round($ValWidth*($Y2-$Y1)/($X2-$X1))]
} else {
set ValHeight [lindex $ListeDesDimensions 1]
}
return [Graphiste $LesOrdresPourGIF $ValWidth $ValHeight $X1 $Y1 $X2 $Y2 $CheminGIF]
}
}
proc LesGenomesParListe {} {
global NotreOS
set LGComplets [LesGenomesComplets]
set LGCourts [LesGenomesCompletsAuFormat Court]
set LesNoms {}
foreach UnGLong $LGComplets UnGCourt $LGCourts {
if { $UnGLong != $NotreOS } {
lappend LesNoms "$UnGCourt $UnGLong"
}
}
return $LesNoms
}
proc LesPanneauxPossibles {{Panneau "LaListeMerci"}} {
global RepertoireDuGenome
global LesPanneauxPossibles
if { ! [info exists LesPanneauxPossibles]} {
# set LesPanneauxPossibles(PresenceAbsence) "Listbox:LesGenomesParListe"
set LesPanneauxPossibles(ShowOrganisms) "Texte:MontreOrganismes"
set LesPanneauxPossibles(LinearGenome) "GscopeBoard $RepertoireDuGenome PourGif"
set LesPanneauxPossibles(CircularGenome) "RscopeBoard $RepertoireDuGenome PourGif"
set LesPanneauxPossibles(PhyloRank) "DessineOrgaEtSesPlaces $RepertoireDuGenome/fiches/orgaetsesplaces.tout_le_monde PourGif"
set LesPanneauxPossibles(PhyloRanks) "DessineOrgaEtSesPlaces $RepertoireDuGenome/fiches/orgaetsesplaces.> PourGif"
set LesPanneauxPossibles(ProteomeDotplot) "DotPlot genomes > Proches PourGif"
}
if {$Panneau=="LaListeMerci"} { return [array names LesPanneauxPossibles] }
if {[info exists LesPanneauxPossibles($Panneau)]} { return [set LesPanneauxPossibles($Panneau)] }
return "Sorry no such panneau"
}
proc SoumettreAuServeurWscope LesCommandes {
global ForumWscope
global FichierAFaire
global FichierDejaFait
global SansServeurWscope
NommeLesFichiersForum
if {[info exists SansServeurWscope] && $SansServeurWscope} {
ChargeConfig
FaireAFaire $LesCommandes
return
}
LanceLeServeurWscope
SauveLesLignes $LesCommandes dans $FichierAFaire
}
proc LesServeursWscopeQuiTournent {{Genome ""}} {
set PS [eval exec ps -ef]
set Sortie {}
foreach Ligne [split $PS "\n"] {
if {[regexp "gscope ToujoursFaire $Genome" $Ligne]} {
lappend Sortie $Ligne
}
}
return $Sortie
}
proc AttendreLeFichierDuServeurWscope {Fichier {TimeOut ""}} {
set Attente 1000
while { 1 } {
if {[file exists $Fichier]} { return $Fichier }
if {$TimeOut != "" } {
set TimeOut [expr $TimeOut-$Attente]
if {$TimeOut<0} { return "" }
}
after $Attente
}
}
proc LanceLeServeurWscope {} {
global GscopeDir
global RepertoireDuGenome
global CurrentGenome
global ForumWscope
global FichierAFaire
global FichierDejaFait
set Sonnette "$ForumWscope/wscope_${CurrentGenome}_est_pret"
lappend LesCommandes "Sauve $Sonnette dans $Sonnette"
SauveLesLignes $LesCommandes dans $FichierAFaire
after 2000
if {! [file exists $Sonnette]} {
after 2000
}
if { ! [file exists $Sonnette]} {
after 5000
eval exec $GscopeDir/bin/gscope ToujoursFaire $CurrentGenome &
after 3000
}
File delete $Sonnette
}
proc NommeLesFichiersForum {} {
global RepertoireDuGenome
global CurrentGenome
global ForumWscope
global FichierAFaire
global FichierDejaFait
if {[info exists FichierAFaire]} { return }
if {[info exists env(FORUMWSCOPE)]} {
set ForumWscope [set env(FORUMWSCOPE)]
} else {
set ForumWscope /biolo/wscope/wscope/forum
}
set FichierAFaire "$ForumWscope/afaire$CurrentGenome"
set FichierDejaFait "$ForumWscope/dejafait$CurrentGenome"
}
proc ToujoursFaire CurGeno {
global FichierAFaire
global FichierDejaFait
global CurrentGenome
set Pointeuse 0
set Attente 2000
set MaxIdle [expr 1000*60*15]
while { 1 } {
incr Pointeuse $Attente
if {[file exists $FichierAFaire]} {
set Pointeuse 0
FaireAFaire
continue
}
if {$Pointeuse > $MaxIdle} { exit }
after $Attente
}
}
proc FaireAFaire {{CeQuIlFautFaire ""}} {
global FichierAFaire
global FichierDejaFait
if {$CeQuIlFautFaire == ""} {
set AFaire [LesLignesDuFichier $FichierAFaire]
} else {
set AFaire $CeQuIlFautFaire
}
foreach Ligne $AFaire {
if {[regexp "^Log " $Ligne]} {
regsub "^Log " $Ligne "" Texte
if {[catch {eval set Texte $Texte} Message]} {
AppendAuFichier $FichierDejaFait "WscopeServerError >"
AppendAuFichier $FichierDejaFait "$Message"
AppendAuFichier $FichierDejaFait "< WscopeServerError"
} else {
AppendAuFichier $FichierDejaFait $Texte
}
AppendAuFichier $FichierDejaFait $Ligne
continue
}
if {[catch {eval $Ligne} Message]} {
AppendAuFichier $FichierDejaFait "WscopeServerError >"
AppendAuFichier $FichierDejaFait "$Message"
AppendAuFichier $FichierDejaFait "< WscopeServerError"
}
AppendAuFichier $FichierDejaFait $Ligne
}
if {$CeQuIlFautFaire == ""} {
File delete $FichierAFaire
}
}
proc NeRejettePasLaBoite Boite {
return 0
}
proc RejetteLaBoite Boite {
global LimiteGauche LimiteDroite
set Nom [Box $Boite nom]
if { ! [YaPABouTROUouTRNAouARNenDebutDe $Nom]} { return 1 }
if { ! [info exists LimiteGauche]} { return 0 }
set Debut [Box $Boite debut]
set Fin [Box $Boite fin]
if {$Fin < $LimiteGauche || $LimiteDroite < $Debut} { return 1 }
return 0
}
proc Td {} {
puts [join [DecoupeEnSousOrdresPourGif "create rectangle 1 2 3 4 -a \{A AA\} -b \\\{ -c -9"] "\n"]
exit
}
proc DecoupeEnSousOrdresPourGif Ordre {
if { ! [regexp -indices -nocase {\-[a-z]} $Ordre Indices] } { return $Ordre }
scan $Indices "%d" iMoins
set Reste [string range $Ordre $iMoins end]
set Commande [string trim [string range $Ordre 0 [incr iMoins -1]]]
scan $Commande "%s %s" Com Type
lappend LesSousOrdres $Commande
while {[regexp {\-} $Reste]} {
set Reste [string trim $Reste]
scan $Reste "%s" Option
regsub "^$Option " $Reste "" Reste
set Reste [string trim $Reste]
if { ! [regexp {^\{} $Reste] } {
set iBlanc [string first " " "$Reste "]
set iFin [expr $iBlanc-1]
set Valeur [string range $Reste 0 $iFin]
set Reste [string range $Reste $iBlanc end]
} else {
set Valeur "\{"
set i 1
set NiveauImbrique 1
while { 1 } {
set C [string index $Reste $i]
#puts "Caract :[string repeat " " $NiveauImbrique]$C"
if {$C=="\}"} {
append Valeur $C
incr i
incr NiveauImbrique -1
if { $NiveauImbrique == 0 } { break }
continue
}
if {$C=="\{"} {
append Valeur $C
incr i
incr NiveauImbrique
continue
}
if {$C=="\\"} {
append Valeur "\\[string index $Reste [incr i]]"
incr i
continue
}
append Valeur $C
incr i
}
set Reste [string range $Reste $i end]
}
#puts "Reste : $Reste"
lappend LesSousOrdres "$Option $Valeur"
}
lappend LesSousOrdres "fin $Com $Type"
return $LesSousOrdres
}
proc LesOrdresPourGif LesOrdresBruts {
global FillPourGif OutlinePourGif
Wup "GscopeBoard, first creates the boxes,"
Wup " and second, color them, storing the colors in the arrays FillPourGif and OutlinePourGif"
foreach Ligne $LesOrdresBruts {
if { ! [regexp "Box|TEXTE|Cadre|arc|Web|Seq|Lettre" $Ligne]} { continue }
if {[regexp "Cadre" $Ligne]} {
regsub "rectangle|rect" $Ligne canvas Ligne
regsub "outline" $Ligne background Ligne
}
if {[regexp "Box" $Ligne]} {
set Nom [StringApres "Box" dans $Ligne]
regsub -all {\}} $Nom "" Nom
if {[info exists FillPourGif($Nom)]} {
if {[regexp {\-fill} $Ligne]} {
append Ligne " -"
regsub {\-fill [^\-]+\-} $Ligne "-fill [set FillPourGif($Nom)] -" Ligne
regsub " \-$" $Ligne "" Ligne
} else {
append Ligne " -fill [set FillPourGif($Nom)]"
}
}
if {[info exists OutlinePourGif($Nom)]} {
if {[regexp {\-outline} $Ligne]} {
append Ligne " -"
regsub {\-outline [^\-]+\-} $Ligne "-outline [set OutlinePourGif($Nom)] -" Ligne
regsub " \-$" $Ligne "" Ligne
} else {
append Ligne " -fill [set OutlinePourGif($Nom)]"
}
}
}
lappend LesOrdresOK $Ligne
}
set LesOrdresTries [lsort -command CompareLeTroisiemeChamp $LesOrdresOK]
foreach Ligne $LesOrdresTries {
Espionne $Ligne
foreach SousOrdre [DecoupeEnSousOrdresPourGif $Ligne] {
lappend LesOrdres $SousOrdre
}
}
return $LesOrdres
}
proc OrdrePourGif args {
global LesOrdresPourGif
global FillPourGif OutlinePourGif
Wup "The 'create rectangle' ( line, arc', etc.) are stored in LesOrdresPourGif"
Wup " the 'find withtag' statement return Nom"
Wup " the itemconfigure statement stores the colors in FillPourGif..."
set OrdreComplet $args
set Ordre [lindex $OrdreComplet 0]
set Texte [join $OrdreComplet " "]
if {$Ordre == "find"} {
set SousOrdre [lindex $OrdreComplet 1]
if {$SousOrdre == "withtag"} {
set Nom [lindex $OrdreComplet 2]
if {[YaPABouTROUouTRNAouARNenDebutDe $Nom]} { return $Nom }
}
}
if {$Ordre == "coords"} {
if {[regexp -nocase -indices {create [a-z]+} $Texte Indices]} {
scan $Indices "%d %d" d f
set Suite [string range $Texte [incr f] end]
set d end
if {[regexp -nocase -indices -- {( | \-)[a-z]+} $Suite Indices]} {
scan $Indices "%d %d" d f
incr d -1
}
set Coordonnees [string range $Suite 0 $d]
return $Coordonnees
}
return "0 0 1 1"
}
if { ! [regexp "^create|^itemconfigure|^xview" $Ordre]} { return $OrdreComplet}
if {$Ordre=="itemconfigure"} {
set CFill "white"
set COutline "black"
scan $Texte "%s %s %s %s %s %s" Ordre Nom Fill CFill Outline COutline
if { ! [YaPABouTROUouTRNAouARNenDebutDe $Nom]} { return $OrdreComplet}
if {$Fill != "-fill"} { return $OrdreComplet }
set FillPourGif($Nom) $CFill
set OutlinePourGif($Nom) $COutline
return $OrdreComplet
}
lappend LesOrdresPourGif $OrdreComplet
return $OrdreComplet
}
proc NeRienFaire args {
}
proc CreeLesOrdresPourGIF {K {CeQuOnVeut "Visible"} {NomDuFichierGIF ""}} {
global LesOrdresPourGIF
JeMeSignale
SauveLesLignes [$K configure] dans creelesordres.log
if {$NomDuFichierGIF == ""} {
set NomDuFichierGIF [FichierPourSaveAs]
}
if {$NomDuFichierGIF==""} { return "" }
set LesOrdresPourGIF {}
set LesOptions {}
foreach OptionValeurs [$K configure] {
set Option [lindex $OptionValeurs 0]
set Valeur [lindex $OptionValeurs 4]
if {$Valeur == {}} { continue }
if {[regexp " " $Valeur]} { set Valeur "\{$Valeur\}" }
lappend LesOptions "$Option $Valeur"
}
lappend LesOrdresPourGIF "create canvas"
foreach Option $LesOptions {
lappend LesOrdresPourGIF $Option
}
lappend LesOrdresPourGIF "fin create canvas"
if {$CeQuOnVeut=="" || $CeQuOnVeut=="Visible"} {
set ScrollRegion [lindex [$K configure -scrollregion] 4]
if {$ScrollRegion!=""} {
scan [$K xview] "%f %f" xVd xVf
scan [$K yview] "%f %f" yVd yVf
scan $ScrollRegion "%f %f %f %f" xSRd ySRd xSRf ySRf
set xd [expr $xSRd+$xVd*($xSRf-$xSRd)]
set yd [expr $ySRd+$yVd*($ySRf-$ySRd)]
set xf [expr $xSRd+$xVf*($xSRf-$xSRd)]
set yf [expr $ySRd+$yVf*($ySRf-$ySRd)]
} else {
set xd 0
set yd 0
set xf [lindex [$K configure -width] 4]
set yf [lindex [$K configure -height] 4]
}
Espionne "$xd $yd $xf $yf"
set LesObjets [$K find enclosed $xd $yd $xf $yf]
}
if {$CeQuOnVeut=="OnVeutTout"} {
set LesObjets [$K find withtag all]
set xd 0
set yd 0
set xf [lindex [$K configure -width] 4]
set yf [lindex [$K configure -height] 4]
}
foreach Id $LesObjets {
set Type [$K type $Id]
set LesOptions {}
foreach OptionValeurs [$K itemconfigure $Id] {
set Option [lindex $OptionValeurs 0]
set Valeur [lindex $OptionValeurs 4]
if {$Valeur == {}} { continue }
if {[regexp " " $Valeur]} { set Valeur "\{$Valeur\}" }
lappend LesOptions "$Option $Valeur"
}
lappend LesOrdresPourGIF "create $Type [$K coords $Id]"
foreach Option $LesOptions {
lappend LesOrdresPourGIF $Option
}
lappend LesOrdresPourGIF "fin create $Type"
}
if {$LesOrdresPourGIF=={}} { return "" }
set LargeurImage [expr ($xf-$xd)]
return [CreeLeFichierGIF $K $LesOrdresPourGIF [list $xd $yd $xf $yf] $NomDuFichierGIF [list $LargeurImage]]
}