diff --git a/postProLoop.py b/postProLoop.py
index 254cec189ae8db3039063d4549339aa512a2a701..ac7ec14193d1cadfa96c4112e655104d1285ad9d 100755
--- a/postProLoop.py
+++ b/postProLoop.py
@@ -13,6 +13,7 @@ import externalProgramPath
 # Variable globale
 import threading
 matlock = threading.Lock()  # un seul matlab a la fois (merdouille avec le R2009a sous windows)
+sciLock = threading.Lock()  # un seul SciLab a la fois (vérifier nécessité)
 
 #------------------------------------------------------------------------------------
 class PostProLoop(PRMSet):
@@ -47,6 +48,12 @@ class PostProLoop(PRMSet):
         TextPRM (self.pars, 'MATLABCMD',          'Matlab Command (script called)',                               '')
         TextPRM (self.pars, 'MATLABPATH',         'Path to Matlab scripts',                                       '')
         TextPRM (self.pars, 'MATLABREQUEST',      'Requested file to run Matlab script',              'parameters.m') #'result.mat', ...
+        # Scilab
+        YesNoPRM(self.pars, 'SCILABRUN',          'Execute a Scilab function',                                 False)
+        TextPRM (self.pars, 'SCILABEXE',          'Path To Scilab Exe',                              progs['SCILAB'])
+        TextPRM (self.pars, 'SCILABCMD',          'Scilab Command (script called)',                               '')
+        TextPRM (self.pars, 'SCILABPATH',         'Path to Scilab scripts',                                       '')
+        TextPRM (self.pars, 'SCILABREQUEST',      'Requested file to run Scilab script',              'parameters.sci') #'result.sod', ...
         # GS
         YesNoPRM(self.pars, 'GSRUN',              'Run GS on Eps Files',                                       False)
         TextPRM (self.pars, 'GSEXE',              'Path To Matlab Exe',                         progs['GHOSTSCRIPT'])
@@ -76,6 +83,14 @@ class PostProLoop(PRMSet):
         PRMAction(self.actions, 'i', self.pars['MATLABPATH'])
         PRMAction(self.actions, 'j', self.pars['MATLABREQUEST'])
         NoAction(self.actions)
+        # Scilab
+        NoAction(self.actions)
+        PRMAction(self.actions, '1', self.pars['SCILABRUN'])
+        PRMAction(self.actions, '2', self.pars['SCILABEXE'])
+        PRMAction(self.actions, '3', self.pars['SCILABCMD'])
+        PRMAction(self.actions, '4', self.pars['SCILABPATH'])
+        PRMAction(self.actions, '5', self.pars['SCILABREQUEST'])
+        NoAction(self.actions)
         # GhostScript
         PRMAction(self.actions, 'k', self.pars['GSRUN'])
         PRMAction(self.actions, 'l', self.pars['GSEXE'])
@@ -107,6 +122,11 @@ class PostProLoop(PRMSet):
         self.pars['MATLABEXE'].enable(self.pars['MATLABRUN'].val==True)
         self.pars['MATLABPATH'].enable(self.pars['MATLABRUN'].val==True)
         self.pars['MATLABREQUEST'].enable(self.pars['MATLABRUN'].val==True)
+        # Scilab
+        self.pars['SCILABCMD'].enable(self.pars['SCILABRUN'].val==True)
+        self.pars['SCILABEXE'].enable(self.pars['SCILABRUN'].val==True)
+        self.pars['SCILABPATH'].enable(self.pars['SCILABRUN'].val==True)
+        self.pars['SCILABREQUEST'].enable(self.pars['SCILABRUN'].val==True)
         # GhostScript
         self.pars['GSEXE'].enable(self.pars['GSRUN'].val==True)
         self.pars['GSFILTER'].enable(self.pars['GSRUN'].val==True)
@@ -184,6 +204,11 @@ class PostProLoop(PRMSet):
             #out = matlab.execMatlabScript(self.pars['MATLABCMD'].val , self.pars['MATLABPATH'].val)
             print("matlab done")
 
+        if self.pars['SCILABRUN'].val and self.checkRequest(self.pars['SCILABREQUEST'].val):
+            print ("launch scilab...")
+            out = execScilabScript(self.pars['SCILABEXE'].val, self.pars['SCILABCMD'].val , self.pars['SCILABPATH'].val)
+            #out = scilab.execScilabScript(self.pars['SCILABCMD'].val , self.pars['SCILABPATH'].val)
+            print ("scilab done")                            
         if self.pars['GSRUN'].val and self.checkRequest(self.pars['GSREQUEST'].val):
             print("launch Ghostscript translation of eps files...")
             #execGhostScriptPostPro(device='png256', outExt='png',res=300)
@@ -243,7 +268,51 @@ def execMatlabScript(matlabExe, matlabCmd, mFilePath=None):
     return a
 #=================================================================================
 #=================================================================================
-
+def execScilabScript(scilabExe, scilabCmd, sciFilePath=None, verb=True):
+    sciCmd = ""
+    if sciFilePath :
+        print ("sciFilePath = ",sciFilePath)
+        sciCmd = sciCmd + "getd('%s'); " %sciFilePath
+    sciCmd = sciCmd + scilabCmd
+    if verb :
+        print ("entering execSciLabPostPro")
+        print ("sciCmd = ",sciCmd)
+    progs = externalProgramPath.ExtProgs()
+    if not progs.checkValidity('SCILAB')  :
+        return 0
+    # log file
+    logFile = os.path.abspath("sciLab.log")
+    if verb :
+        print ("logFile = ",logFile)
+    # Command line
+    #import toolbox.pyutils as pyutils
+    # -nwni = génération de la db, mais pas de génération de figure (nécessite l'affichage)
+    # -nw   = génération de la db, & génération des figures en background
+    # Argument "-nw" is no longer supported since Scilab 6.0.2.
+    # scilab -nw starts WScilex-cli.exe: Scilab CLI with full functionnalities.
+    #cmd = '"%s" -e "%s" > "%s" 2>&1' % (scilabExe, sciCmd, logFile)     
+    cmd = '"%s" -nw -e "%s" > "%s" 2>&1' % (scilabExe, sciCmd, logFile)
+    if verb :
+        print ('subprocess command : ', cmd)
+    # acquire sciLock
+    tim0 = time.time()
+    sciLock.acquire()
+    try :
+        print ("Running Scilab...")
+        import subprocess
+        scilabProcess = subprocess.call(cmd, shell=True)
+        print ("Running Scilab... Done")
+        a = 1.0
+    except :
+        # fonction objectif doit retourner un double
+        print ("problem during Scilab run")
+        a = 0.0
+    # release sciLock
+    sciLock.release()
+    print (" Scilab exec time = %d sec" %(time.time()-tim0))
+    return a
+#=================================================================================
+#=================================================================================
 def execGhostScript(gsExe, inFilter = '*.eps', device='png256', res=300):
     import subprocess, os, time
     tim0 = time.time()
diff --git a/postProLoopGui.pyw b/postProLoopGui.pyw
index 09ae70f83d1d7acb5435e21d1ef14767a182c7a3..8eab7ebd5e13098242eb7d9c5213f2dbbd1a7ad0 100755
--- a/postProLoopGui.pyw
+++ b/postProLoopGui.pyw
@@ -47,6 +47,9 @@ class PostProLoopGui(QWidget):
         #   |  Matlab :                      |
         #   |       - options                |
         #   |--------------------------------|
+        #   |  Scilab :                      |
+        #   |       - options                |
+        #   |--------------------------------|
         #   |  GhostScript :                 |
         #   |       - options                |
         #   |--------------------------------|
@@ -105,43 +108,56 @@ class PostProLoopGui(QWidget):
         self.sf['MATLABCMD']       = TextLine    (self, grplay2, self.postProLoop.pars['MATLABCMD'], 2, 0, 4)   
         self.sf['MATLABPATH']      = PathLine    (self, grplay2, self.postProLoop.pars['MATLABPATH'], 3, 0, 4)
         self.sf['MATLABREQUEST']   = TextLine    (self, grplay2, self.postProLoop.pars['MATLABREQUEST'], 4, 0, 4)
-        
-        #GhostScript box
-        self.mesherGrpBox  = QGroupBox("GhostScript (eps -> png)")
+
+        #Scilab box
+        self.mesherGrpBox  = QGroupBox("Scilab")
         box.addWidget(self.mesherGrpBox)
         grplay3 = QGridLayout()
         grplay3.setColumnStretch(2,1)
         self.mesherGrpBox.setLayout(grplay3)
                     
-        self.sf['GSRUN']           = CheckBoxLine(self, grplay3, self.postProLoop.pars['GSRUN'], 0, 0)     
-        self.sf['GSEXE']           = ExeFileLine (self, grplay3, self.postProLoop.pars['GSEXE'], exeFileType, 1, 0, 4)
-        self.sf['GSFILTER']        = TextLine    (self, grplay3, self.postProLoop.pars['GSFILTER'], 2, 0, 1)
-        self.sf['GSOUTPUTFORMAT']  = MultiPMRLine(self, grplay3, self.postProLoop.pars['GSOUTPUTFORMAT'],3, 0)
-        self.sf['GSDEFINITION']    = TextLine    (self, grplay3, self.postProLoop.pars['GSDEFINITION'], 3, 3, 1, QIntValidator(72,1800))
-        self.sf['GSREQUEST']       = TextLine    (self, grplay3, self.postProLoop.pars['GSREQUEST'], 4, 0, 1)
-
-        #build Latex box
-        self.mesherGrpBox  = QGroupBox("Python")
+        self.sf['SCILABRUN']       = CheckBoxLine(self, grplay3, self.postProLoop.pars['SCILABRUN'], 0, 0)    
+        self.sf['SCILABEXE']       = ExeFileLine (self, grplay3, self.postProLoop.pars['SCILABEXE'], exeFileType, 1, 0, 4)
+        self.sf['SCILABCMD']       = TextLine    (self, grplay3, self.postProLoop.pars['SCILABCMD'], 2, 0, 4)   
+        self.sf['SCILABPATH']      = PathLine    (self, grplay3, self.postProLoop.pars['SCILABPATH'], 3, 0, 4)
+        self.sf['SCILABREQUEST']   = TextLine    (self, grplay3, self.postProLoop.pars['SCILABREQUEST'], 4, 0, 4)
+        
+        #GhostScript box
+        self.mesherGrpBox  = QGroupBox("GhostScript (eps -> png)")
         box.addWidget(self.mesherGrpBox)
         grplay4 = QGridLayout()
         grplay4.setColumnStretch(2,1)
         self.mesherGrpBox.setLayout(grplay4)
                     
-        self.sf['PYTHONRUN']           = CheckBoxLine(self, grplay4, self.postProLoop.pars['PYTHONRUN'], 0, 0)     
-        self.sf['PYTHONMODULE']        = FileLine    (self, grplay4, self.postProLoop.pars['PYTHONMODULE'], '*.py', 1, 0, 4)
-        self.sf['PYTHONSCRIPT']        = TextLine    (self, grplay4, self.postProLoop.pars['PYTHONSCRIPT'], 2, 0, 4)
-        self.sf['PYTHONREQUEST']       = TextLine    (self, grplay4, self.postProLoop.pars['PYTHONREQUEST'], 3, 0, 4)
-        '''
+        self.sf['GSRUN']           = CheckBoxLine(self, grplay4, self.postProLoop.pars['GSRUN'], 0, 0)     
+        self.sf['GSEXE']           = ExeFileLine (self, grplay4, self.postProLoop.pars['GSEXE'], exeFileType, 1, 0, 4)
+        self.sf['GSFILTER']        = TextLine    (self, grplay4, self.postProLoop.pars['GSFILTER'], 2, 0, 1)
+        self.sf['GSOUTPUTFORMAT']  = MultiPMRLine(self, grplay4, self.postProLoop.pars['GSOUTPUTFORMAT'],3, 0)
+        self.sf['GSDEFINITION']    = TextLine    (self, grplay4, self.postProLoop.pars['GSDEFINITION'], 3, 3, 1, QIntValidator(72,1800))
+        self.sf['GSREQUEST']       = TextLine    (self, grplay4, self.postProLoop.pars['GSREQUEST'], 4, 0, 1)
+
         #build Latex box
-        self.mesherGrpBox  = QGroupBox("Latex")
+        self.mesherGrpBox  = QGroupBox("Python")
         box.addWidget(self.mesherGrpBox)
         grplay5 = QGridLayout()
         grplay5.setColumnStretch(2,1)
         self.mesherGrpBox.setLayout(grplay5)
                     
-        self.sf['LATEXRUN']           = CheckBoxLine(self, grplay5, self.postProLoop.pars['LATEXRUN'], 0, 0)     
-        self.sf['LATEXCMD']           = TextLine    (self, grplay5, self.postProLoop.pars['LATEXCMD'], 1, 0, 4)
-        self.sf['LATEXREQUEST']       = TextLine    (self, grplay5, self.postProLoop.pars['LATEXREQUEST'], 2, 0, 4)
+        self.sf['PYTHONRUN']           = CheckBoxLine(self, grplay5, self.postProLoop.pars['PYTHONRUN'], 0, 0)     
+        self.sf['PYTHONMODULE']        = FileLine    (self, grplay5, self.postProLoop.pars['PYTHONMODULE'], '*.py', 1, 0, 4)
+        self.sf['PYTHONSCRIPT']        = TextLine    (self, grplay5, self.postProLoop.pars['PYTHONSCRIPT'], 2, 0, 4)
+        self.sf['PYTHONREQUEST']       = TextLine    (self, grplay5, self.postProLoop.pars['PYTHONREQUEST'], 3, 0, 4)
+        '''
+        #build Latex box
+        self.mesherGrpBox  = QGroupBox("Latex")
+        box.addWidget(self.mesherGrpBox)
+        grplay6 = QGridLayout()
+        grplay6.setColumnStretch(2,1)
+        self.mesherGrpBox.setLayout(grplay6)
+                    
+        self.sf['LATEXRUN']           = CheckBoxLine(self, grplay6, self.postProLoop.pars['LATEXRUN'], 0, 0)     
+        self.sf['LATEXCMD']           = TextLine    (self, grplay6, self.postProLoop.pars['LATEXCMD'], 1, 0, 4)
+        self.sf['LATEXREQUEST']       = TextLine    (self, grplay6, self.postProLoop.pars['LATEXREQUEST'], 2, 0, 4)
         '''        
         
     def buildButtonFrame(self, box):