Index by: file name | procedure name | procedure call | annotation
gscope_macsimsql.tcl (annotations | original source)

#rR gscope_macsimsql.tcl

proc IsPk Text {
    return [regexp {^[0-9]+$} $Text]
}

proc ConvertToPkMacsSeq {aMacs {aSeq ""}} {
    upvar $aMacs Macs
    if {$aSeq!=""} { upvar $aSeq  Seq } else { set Seq 1 }
    if { ! [IsPk $Macs]} { set Macs [SqlExec "select pk_macsims from macsims where name = '$Macs'"] }
    if { ! [IsPk $Macs]} { return 0 }
    if { ! [IsPk $Seq]} { set Seq [SqlExec "select pk_seq from seq where name='$Seq' and pk_macsims=$Macs"] }
    if { ! [IsPk $Seq]} { return 0 }
    return 1
}

proc QueryMacsimsLinkedInfo {Macs Seq Table} {

    CanalSqlMacsims
    if { ! [ConvertToPkMacsSeq Macs Seq]} { return ""}

    set Sql "select t.* from $Table t , ln_seq_$Table ln where ln.pk_seq=$Seq and ln.pk_$Table=t.pk_$Table"
    return [SqlExec $Sql "GetList"]
}

proc QueryMacsimsSeqInfo {Macs Seq Type {GetWhat ""}} {

    CanalSqlMacsims
    if { ! [ConvertToPkMacsSeq Macs Seq]} { return ""}

    if {$Type == "ListOfType"} {
	set Sql "select distinct TYPE from SEQINFO where PK_SEQ=$Seq"
	if {[regexp "^order by " $GetWhat]} { append Sql " $GetWhat" ; set GetWhat "GetList" }
	if {$GetWhat==""} { set GetWhat "GetList" }
	return [SqlExec $Sql $GetWhat]
    }

    if {$Type == "x" || $Type == "ListOfTypeValue" } {
	set Sql "select TYPE, VALUE from SEQINFO where PK_SEQ=$Seq"
	if {[regexp "^order by " $GetWhat]} { append Sql " $GetWhat" ; set GetWhat "GetList" }
	if {$GetWhat==""} { set GetWhat "GetList" }
	return [SqlExec $Sql $GetWhat]
    }

    set Sql "select VALUE from SEQFEATURE where TYPE='$Type' and PK_SEQ=$Seq"
    if {[regexp "^order by " $GetWhat]} { append Sql " $GetWhat" ; set GetWhat "GetList" }
    return [SqlExec $Sql $GetWhat]
}
  
proc QueryMacsimsSeqFeature {Macs Seq FType {Key ""} {GetWhat ""}} {

    CanalSqlMacsims
    if { ! [ConvertToPkMacsSeq Macs Seq]} { return ""}

    if {[regexp -nocase {ListOfFType} $FType] } {
	set Sql "select distinct FTYPE from SEQFEATURE where PK_SEQ=$Seq"
	if {[regexp -nocase "^order by |^Get" $Key]} { set GetWhat $Key }
	if {[regexp -nocase "^order by " $GetWhat]} { append Sql " $GetWhat" ; set GetWhat "GetList" }
	if {$GetWhat==""} { set GetWhat "GetList" }
	return [SqlExec $Sql $GetWhat]
    }

    if {[regexp -nocase {\*|x|ListOfAll} $FType] } {
	set Sql "select * from SEQFEATURE where PK_SEQ = $Seq"
	if {[regexp -nocase "^order by |^Get" $Key]} { set GetWhat $Key }
	if {[regexp -nocase "^order by " $GetWhat]} { append Sql " $GetWhat" ; set GetWhat "GetList" }
	if {$GetWhat==""} { set GetWhat "GetList" }
	return [SqlExec $Sql $GetWhat]
    }

    if {[regexp -nocase {\*|x} $Key] } { set Key "*" }
    set Sql "select $Key from SEQFEATURE where FTYPE = '$FType' and PK_SEQ = $Seq"
    if {[regexp "^order by " $GetWhat]} { append Sql " $GetWhat" ; set GetWhat "GetList" }
    if {$GetWhat==""} { set GetWhat "GetList" }
    Espionne $Sql
    return [SqlExec $Sql $GetWhat]
}
  
proc QueryMacsimsSeq {Macs {Seq ""} {Key ""} {GetWhat ""}} {
    CanalSqlMacsims
    if {$Seq==""} { set Seq "ListOf" }
    if {$Key==""} { set Key "NAME" }
    if {[regexp -nocase {\*|x} $Key] } {
	set Key "*"
	if {$GetWhat==""} { set GetWhat "GetList" }
    }
    if {$Seq=="ListOf"} {
	set Sql "select $Key from SEQ s where s.PK_MACSIMS=$Macs"
	if {[regexp "^order by " $GetWhat]} {
	    append Sql " $GetWhat"
	    set GetWhat "GetList" 
	}
	if {$GetWhat==""} { set GetWhat "GetList" }
	return [SqlExec $Sql $GetWhat]
    }
    if { ! [ConvertToPkMacsSeq Macs Seq]} { return ""}
    set Sql "select $Key from SEQ s where s.PK_MACSIMS=$Macs and s.PK_SEQ=$Seq"
    if {[regexp "^order by " $GetWhat]} {
	append Sql " $GetWhat"
	set GetWhat "GetList" 
    }
    return [SqlExec $Sql $GetWhat]
}

proc QueryMacsims {{Qui ""} {Quoi ""} {Key ""} {Where ""} {Order ""} {GetWhat ""}} {


    if {$Key=="x"} { set Key "*" }

    CanalSqlMacsims
    if {[regexp "^select" $Qui]} {
	if {$GetWhat==""} { set GetWhat "GetList" }
	return [SqlExec $Qui $GetWhat]
    }

    if {[IsColsConsFreeSurf $Qui]} {
    }

    if {$Qui ==""} { set Qui "ListOf" }

    if {$Qui == "ListOf"} {
	if {$GetWhat==""} { set GetWhat "GetList" }
	set Table $Quoi
	if {$Table==""} { set Table "macsims" }
	if {$Key ==""} { set Key "pk_$Table" }
	set LesValeurs [SqlExec "select $Key from $Table $Where $Order" $GetWhat]
	return $LesValeurs
    }

    set Table $Qui
    set Qui $Quoi
    if {$Where == ""} {
	if {[IsPk $Qui]} {
	    set Where "where pk_$Table = $Qui" 
	} else {
	    set Where "where name ilike '$Qui'" 
	}
    }
    if {$GetWhat=="" &&	[regexp {[\*\,]} $Key]} { set GetWhat "GetList" }
    set LesValeurs [SqlExec "select $Key from $Table $Where $Order" $GetWhat]
    return $LesValeurs
}

proc GetFreetextFromSql Nom {
    set Retour [SqlExec "select FREETEXT from MACSIMS \
		    where FREETEXT like '%GscopeID $Nom\n%'" "GetFirstValue"]
    Espionne $Retour
    exit
}

proc GetMacsimSFromSql Nom {
    set Retour [SqlExec "select MACSIMSXML from MACSIMS \
		    where FREETEXT like '%GscopeID $Nom\n%'" "GetFirstValue"]
    Espionne $Retour
    exit
}

proc InsCommun {} {
    set FichierSqlCommun "[RepertoireDuGenome]/InsCommuns.sql"
    foreach Nom [ListeDesPABs] {
	set FichierSql [GscopeFile $Nom "macsimSql"]
	if {[FileAbsent $FichierSql]} { continue }
	lappend LeCommun [ContenuDuFichier $FichierSql]
    }
    return [SauveLesLignes $LeCommun dans $FichierSqlCommun]
}

proc ExtDbEntry Accession {
    return $Accession
}

proc ClustName Owner {
    return $Owner
}

proc MacsimsCodification {SX El} {
    global MacsimsCodification

    set El [string tolower $El]

    if {[info exists MacsimsCodification($SX,$El)]}     { return $MacsimsCodification($SX,$El) }
    if {[info exists MacsimsCodification("EstCharge")]} { return $Ele }
    set MacsimsCodification("EstCharge") 1
    set MacsimsCodification(Sql,macsim)                   "MACSIMS"
    set MacsimsCodification(Sql,alignment)                "MACSIMS"
    set MacsimsCodification(Sql,sequence)                 "SEQ"
    set MacsimsCodification(Sql,column-score)             "COLSCORE"
    set MacsimsCodification(Sql,freetext)                 "FREETEXT"
    set MacsimsCodification(Sql,consensus)                "CONSENSUS"
    set MacsimsCodification(Sql,surface-accessibility)    "SURFACC"

    set MacsimsCodification(Xml,macsims)                  "macsim"
    set MacsimsCodification(Xml,alignment)                "aln"
    set MacsimsCodification(Xml,sequence)                 "seq"
    set MacsimsCodification(Xml,column-score)             "colsco"
    set MacsimsCodification(Xml,freetext)                 "freetext"
    set MacsimsCodification(Xml,consensus)                "cons"
    set MacsimsCodification(Xml,surface-accessibility)    "suracc"

    set MacsimsCodification(ListOf,keys) [lsort -unique [array names MacsimsCodification]]
    return [MacsimsCodification $SX $El]
}

proc IsColsConsFreeSurf Word {
    set LesIsColsConsFreeSurf [list "column-score" "consensus" "freetext" "surface-accessibility" "colscor" "consensus" "freetext" "surfacc"]
    set i [lsearch $LesIsColsConsFreeSurf $Word]
    return [expr $i >= 0]
}

proc NodeSequence NodeName {
    return [string equal $NodeName "sequence"]
}

proc CreateSqlFromXmlMacsimsPourTous {} {
    
    CanalSqlMacsims

    CreateDirIfAbsent [GscopeSubDir "macsimSql"]
    foreach Nom [ListeDesPABs] {
	Espionne $Nom
	set FichierSql [GscopeFile $Nom "macsimSql"]
#	if {[FileExists $FichierSql]} { Espionne "$FichierSql already exists" ; continue }
	set FichierXml [GscopeFile $Nom "macsimXml"]
	if {[FileAbsent $FichierXml]} { Espionne "$FichierXml doesn't exist" ; continue }
	set Status [CreateSqlFromXmlMacsims $FichierXml $FichierSql]
    }
}

proc CreateSqlFromXmlMacsimsFromDirectory {{Dir ""} {Ext ""}} {
    
    if {$Ext==""} { set Ext ".xml" }
    if {$Dir==""} { set Dir [ChoixDuRepertoire] }

    CanalSqlMacsims

#   CreateDirIfAbsent [GscopeSubDir "macsimSql"]
    foreach File [glob -nocomplain "$Dir/*$Ext"] {
	Espionne $File
	regsub "$Ext" $File "" FichierSql
	append FichierSql ".sql"
	set FichierSql "/dev/null"
#	if {[FileExists $FichierSql]} { Espionne "$FichierSql already exists" ; continue }
	set FichierXml $File
	if {[FileAbsent $FichierXml]} { Espionne "$FichierXml doesn't exist" ; continue }
	set Status [CreateSqlFromXmlMacsims $FichierXml $FichierSql]
    }
}

proc CreateSqlFromXmlMacsims {NomOuFichier {FichierSql ""}} {

    package require tdom

    CanalSqlMacsims

    set Nom [file tail $NomOuFichier]
    while 1 {
	set FichierXml $NomOuFichier
	if {[regexp "/" $FichierXml]} { break }
	if { ! [EstUnPAB $Nom]} { break }
	set FichierXml "[RepertoireDuGenome]/macsimXml/$Nom"
	if {[file exists $FichierXml]} { break }
	set FichierXml "[RepertoireDuGenome]/macsimXml/$Nom.xml"
	if {[file exists $FichierXml]} { break }
	return ""
    }

    if {$FichierSql=="macsimSql"} {
	if {[regexp "/macsimXml/" $FichierXml]} {
	     regsub "/macsimXml/" $FichierXml "/macsimSql/" FichierSql
	} else {
	    set FichierSql $FichierXml
	}
	regsub ".xml$" $FichierSql "" FichierSql
	append FichierSql ".sql"
	set RepSql [file dirname $FichierSql]
	if {[DirAbsent $RepSql]} {file mkdir $RepSql}
    }
#    if {[FileExists $FichierSql]} { file delete $FichierSql }
    set FichierSql [LogInsUpDelPourExec "InFile" $FichierSql]

    set MacsimsXml [ContenuDuFichier $FichierXml]
    set NoeudMacsims [[dom parse $MacsimsXml] documentElement]


    set NoeudAli [$NoeudMacsims selectNodes "alignment"]
    set AlnName  [$NoeudAli selectNodes "string(aln-name)"]
    set AlnScore [$NoeudAli selectNodes "string(aln-score)"]
    set AlnNote  [$NoeudAli selectNodes "string(aln-note)"]

    set LeFreetext [list "Macsims sql database created by Gscope [Date NiceSeconds]"]
    if {[OnTraiteSpine]} {
	set GscopeID  $Nom
	set SpineID   [ExtraitInfo $Nom "SpineID"]
	set SpineRef  [ExtraitInfo $Nom "SpineRef"]
	set SpineDef  [ExtraitInfo $Nom "SpineDef"]
	set SpineHRef [H_Href $SpineRef [WgetzSurWeb $SpineRef "" "GetUrl"]]

	lappend LeFreetext "GscopeID $GscopeID"
	lappend LeFreetext "Alias [Alias $Nom]"
	lappend LeFreetext "SpineID $SpineID"
	lappend LeFreetext "SpineRef $SpineRef"
	lappend LeFreetext "SpineDef $SpineDef"
	lappend LeFreetext "SpineHRef $SpineHRef"
    }
    set Freetext [join $LeFreetext "\n"]

    set TexteMsf    ""
    set TexteMacsims $FichierXml
    set PkMacsims [SqlInsertOnceRecordIntoTable "+MACSIMS" \
	    NAME $AlnName \
	    SCORE $AlnScore \
	    NOTE $AlnNote \
	    MSF $TexteMsf \
	    MACSIMSXML $TexteMacsims]
    set AlreadyExists [regexp "already exists" $PkMacsims]

    scan $PkMacsims "%d" PkMacsims
    if {$AlreadyExists} {
	if {1 || [OuiOuNon "macsims $PkMacsims already exists. Do I skip it other information ?"]} {
	    LogInsUpDelPourExec "CloseFile"
	    return $FichierSql
	}
    } else {
	set GoodFreetext [QuoteEtBackslashPourSql $Freetext]
	SqlExec "update macsims set freetext='$GoodFreetext' where pk_macsims=$PkMacsims;"    
    }
    foreach NoeudLigne [$NoeudAli childNodes] {
	set NodeName [$NoeudLigne nodeName]
	if {[regexp {aln\-} $NodeName]} { continue }
	CreateSqlFromChildOfAlignment $NoeudLigne $PkMacsims
    }
    LogInsUpDelPourExec "CloseFile"
    return $FichierSql
}

proc CreateSqlFromChildOfAlignment {Noeud PkMacsims} {
    global PosInAln
    global CommandeAFaireApres

    if { ! [info exists PosInAln]} { set PosInAln 0 }
    incr PosInAln

    set NodeName [$Noeud nodeName]
    set NodeName [string tolower $NodeName]

    if {[IsColsConsFreeSurf $NodeName]} {
	return [CreateSqlFromNodeColsConsFreeSurf $Noeud $NodeName $PkMacsims $PosInAln]
    }

    if {[NodeSequence $NodeName]} {
	return [CreateSqlFromNodeSequence $Noeud $NodeName $PkMacsims $PosInAln]
    }

    FaireLire "Unknown nodename $NodeName"
    return ""
}

proc CreateSqlFromNodeSequence {Noeud NodeName PkMacsims PosInAln} {
    set NoeudSeqAli $Noeud
    set SeqName [$NoeudSeqAli selectNodes "string(seq-name)"]
    set SeqData [$NoeudSeqAli selectNodes "string(seq-data)"]
    regsub -all -nocase {[^\.\-A-Z]} $SeqData "" SeqData
    regsub -all -nocase {[^A-Z]} $SeqData "" SeqDataNoGap

    set Type "Protein"

    set PkSeq [SqlInsertRecordIntoTable "SEQ" \
	    PK_MACSIMS $PkMacsims \
	    NAME       $SeqName \
	    TYPE       $Type \
	    DATA       $SeqData \
	    DATANOGAP  $SeqDataNoGap \
	    POSINALN   $PosInAln]
    set Clef "SEQ,$PkMacsims,$SeqName"
    if {[info exists CommandeAFaireApres($Clef)]} {
	foreach CommandeAFaire $CommandeAFaireApres($Clef) {
	    eval $CommandeAFaire
	}
	unset CommandeAFaireApres($Clef)
    }

    set NoeudInfos  [$NoeudSeqAli selectNodes "seq-info"]

    foreach NoeudInfo [$NoeudInfos childNodes] {
	set NodeName [$NoeudInfo nodeName]

	if {$NodeName=="accession"} {
	    set DbName ""
	    set Accession [$NoeudInfo selectNodes "string()"]
	    set PkExtDbEntry [ValeurPk [SqlInsertOnceRecordIntoTable "EXTDBENTRY" \
		    DBNAME $DbName \
		    VALUE $Accession]]
	    set Status [SqlInsertOnceRecordIntoTable "LN_SEQ_EXTDBENTRY" \
		    PK_SEQ $PkSeq \
		    PK_EXTDBENTRY $PkExtDbEntry]
	    continue
	}
	if {$NodeName=="organism"} {
	    set GenreEspece [$NoeudInfo selectNodes "string()"]
	    regsub {\.} $GenreEspece " " GenreEspece
	    set Genre ""
	    set Espece ""
	    scan $GenreEspece "%s %s" Genre Espece
	    set PkTaxonomy [SqlExec "select PK_TAXONOMY from TAXONOMY \
		    where name like '$Genre $Espece'" "GetFirstValue"]
	    if {$PkTaxonomy==""} { continue } 
	    set Status [SqlInsertOnceRecordIntoTable "LN_SEQ_TAXONOMY" \
		    PK_SEQ $PkSeq \
		    PK_TAXONOMY $PkTaxonomy]
	    continue
	}
	if {$NodeName=="taxid"} {
	    set TaxId [$NoeudInfo selectNodes "string()"]
	    set PkTaxonomy [SqlExec "select PK_TAXONOMY from TAXONOMY where PK_TAXONOMY=$TaxId" "GetFirstValue"]
	    if {$PkTaxonomy==""} { continue } 
	    set Status [SqlInsertOnceRecordIntoTable "LN_SEQ_TAXONOMY" \
		    PK_SEQ $PkSeq \
		    PK_TAXONOMY $PkTaxonomy]
	    continue
	}
	if {$NodeName=="keywordlist"} {
	    foreach NoeudKeywordList [$NoeudInfo selectNodes "string(keywordlist)"] {
		foreach NoeudKeyword [$NoeudKeywordList childNodes] {
		    set Keyword [$NoeudKeyword selectNodes "string()"]
		    set PkKeyword [ValeurPk [SqlInsertOnceRecordIntoTable "KEYWORD" \
			    VALUE $Keyword]]
		    set Status [SqlInsertOnceRecordIntoTable "LN_SEQ_KEYWORD" \
			    PK_SEQ $PkSeq \
			    PK_KEYWORD $PkKeyword]
		    continue		    
		}
	    }
	    continue
	}
	if {$NodeName=="goxreflist"} {
	    foreach NoeudGoxrefList [$NoeudInfo selectNodes "string(goxreflist)"] {
		foreach NoeudGoxref [$NoeudGoxrefList childNodes] {
		    set GoId       [$NoeudGoxref selectNodes "string(goid)"]
		    set GoClass    [$NoeudGoxref selectNodes "string(goclass)"]
		    set GoDesc     [$NoeudGoxref selectNodes "string(godesc)"]
		    set GoEvidence [$NoeudGoxref selectNodes "string(goevidence)"]
		    set PkGoxref [ValeurPk [SqlInsertOnceRecordIntoTable "GOXREF" \
						GOID $GoId \
						GOCLASS $GoClass \
						GODESC $GoDesc \
						GOEVIDENCE $GoEvidence ]]
		    set Status [SqlInsertOnceRecordIntoTable "LN_SEQ_GOXREF" \
				    PK_SEQ $PkSeq \
				    PK_GOXREF $PkGoxref]
		    continue
		}
	    }
	    continue
	}

	if {$NodeName=="ftable"} {
	    set NoeudFtable $NoeudInfo
	    foreach NoeudFitem [$NoeudFtable selectNodes "fitem"] {
		set Ftype  [$NoeudFitem selectNodes "string(ftype)"]
		set Fstart [$NoeudFitem selectNodes "string(fstart)"]
		set Fstop  [$NoeudFitem selectNodes "string(fstop)"]
		set Fcolor [$NoeudFitem selectNodes "string(fcolor)"]
		set Fscore [$NoeudFitem selectNodes "string(fscore)"]
		set Fnote  [$NoeudFitem selectNodes "string(fnote)"]
		set Status [SqlInsertRecordIntoTable SEQFEATURE \
			PK_SEQ      $PkSeq \
			FTYPE       $Ftype \
			FSTART      $Fstart \
			FSTOP       $Fstop \
			FCOLOR      $Fcolor \
			FSCORE      $Fscore \
			FNOTE       $Fnote \
			FSTATUS     $Status ]
	    }
	    continue
	}
	if {$NodeName=="lineage"} {
	    set LesTaxons {}
	    foreach NoeudTaxon [$NoeudInfo childNodes] {
		set Taxon [$NoeudTaxon selectNodes "string()"]
		lappend LesTaxons $Taxon
	    }
	    set Lineage [join $LesTaxons "; "]
	    set PkInfo [SqlInsertRecordIntoTable SEQINFO \
		    PK_SEQ $PkSeq \
		    TYPE   "lineage" \
		    VALUE  $Lineage]
	    continue
	}
	

	set Info [$NoeudInfo selectNodes "string()"]
	set PkInfo [SqlInsertRecordIntoTable SEQINFO \
		PK_SEQ $PkSeq \
		TYPE   $NodeName \
		VALUE  $Info]

	if {$NodeName=="group"} {
	    set G $Info
	    set ClustName "group_$G"
	    set PkClust [ValeurPk [SqlInsertOnceRecordIntoTable "CLUST" \
		    PK_MACSIMS $PkMacsims \
		    NAME       $ClustName]]
	    SqlExec "update SEQ set PK_CLUST=$PkClust where PK_SEQ=$PkSeq" 
	}
	continue 
    }
}

proc CreateSqlFromNodeColsConsFreeSurf {Noeud NodeName PkMacsims PosInAln} {
    global CommandeAFaireApres

    set NomSql [MacsimsCodification "Sql" $NodeName]
    set NomXml [MacsimsCodification "Xml" $NodeName]
    
    set Name  [$Noeud selectNodes "string($NomXml-name)"]
    set Owner [$Noeud selectNodes "string($NomXml-owner)"]
    set Type  [$Noeud selectNodes "string($NomXml-type)"]
    set Data  [$Noeud selectNodes "string($NomXml-data)"]
    
#   if {[OuiOuNonMemo "je stoppe encore ici"]} {}
    if {$Owner==""} { set Owner "all" }
    if {[regexp {^[0-9]+$} $Owner]} {
	set Owner "group_$Owner"
    }

    set PkTable [SqlInsertRecordIntoTable $NomSql \
	    NAME  $Name \
	    TYPE  $Type \
	    DATA  $Data \
	    POSINALN $PosInAln]
    
    if {$Owner==0 || [string equal -nocase "all" $Owner]} {
	set Status [SqlInsertOnceRecordIntoTable "LN_MACSIMS_$NomSql" \
		PK_MACSIMS  $PkMacsims \
		PK_$NomSql $PkTable]
	return $Status
    }
    if {[regexp {^group_[0-9]+$} $Owner]} {
	set ClustName [ClustName $Owner]
	set Query "select PK_CLUST from CLUST \
		where PK_MACSIMS=$PkMacsims and NAME='$ClustName'"
	set PkClust [SqlExec $Query "GetFirstValue"]
	if {$PkClust==""} {
	    set PkClust [SqlInsertRecordIntoTable CLUST \
		    PK_MACSIMS $PkMacsims \
		    NAME     $ClustName ]
	}
	set Status [SqlInsertOnceRecordIntoTable "LN_CLUST_$NomSql" \
		PK_CLUST   $PkClust \
		PK_$NomSql $PkTable]
	return $Status
    }
    #rR owner = seqname   
    set Query "select PK_SEQ from SEQ \
	    where PK_MACSIMS=$PkMacsims and NAME='$Owner'"
    set PkSeq [SqlExec $Query "GetFirstValue"]
    set CommandeAFaire "SqlInsertOnceRecordIntoTable LN_SEQ_$NomSql \
	    PK_SEQ      \[set PkSeq\] \
	    PK_$NomSql  $PkTable"
    if {$PkSeq!=""} {
	set Status [eval $CommandeAFaire]
	return $Status
    } else {
	set Clef "SEQ,$PkMacsims,$Owner"
	lappend CommandeAFaireApres($Clef) $CommandeAFaire
#	Espionne "lappend CommandeAFaireApres($Clef) $CommandeAFaire"
	set Status "DefferedCommand $Clef"
	return $Status
    }	    
}













Index by: file name | procedure name | procedure call | annotation
File generated 2022-04-05 at 12:55.