Linux build : fix undefined pragma
[scilab.git] / scilab / modules / startup / src / cpp / scilab.cpp
index 043d9db..e424c53 100644 (file)
@@ -3,16 +3,21 @@
  *  Copyright (C) 2006-2008 - DIGITEO - Bruno JOFRET
  *  Copyright (C) 2013 - Scilab Enterprises - Antoine ELIAS
  *
- *  This file must be used under the terms of the CeCILL.
- *  This source file is licensed as described in the file COPYING, which
- *  you should have received as part of this distribution.  The terms
- *  are also available at
- *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ * Copyright (C) 2012 - 2016 - Scilab Enterprises
+ *
+ * This file is hereby licensed under the terms of the GNU GPL v2.0,
+ * pursuant to article 5.3.4 of the CeCILL v.2.1.
+ * This file was originally licensed under the terms of the CeCILL v2.1,
+ * and continues to be available under such terms.
+ * For more information, see the COPYING file which you should have received
+ * along with this program.
  *
  */
 
 
+#ifdef _MSC_VER
 #pragma comment(lib,"../../../../../bin/libintl.lib")
+#endif
 
 #include <cstdio>
 #include <iostream>
@@ -34,6 +39,8 @@ extern "C"
 
     extern char *getCmdLine(void);
 #ifdef _MSC_VER
+#include "FilesAssociations.h"
+#include "PATH_MAX.h"
     jmp_buf ScilabJmpEnv;
 #else
     extern jmp_buf ScilabJmpEnv;
@@ -56,12 +63,17 @@ extern "C"
 /*
 ** Usage
 **
-** Display usage : options available in YaSp
+** Display usage : options available
 */
 static void usage(void)
 {
     std::cerr << "Usage: Scilab <options>" << std::endl;
-    std::cerr << "      -f file          : Batch mode on the given file." << std::endl;
+    std::cerr << "      -e Instruction   : execute the scilab instruction given in Instruction argument.";
+    std::cerr << "                         -e and -f arguments are mutually exclusive.";
+    std::cerr << "      -f File          : execute the scilab script given in File argument.";
+    std::cerr << "                         -e and -f arguments are mutually exclusive.";
+    std::cerr << "      -quit            : force scilab exit after execution of script from -e or -f argument.";
+    std::cerr << "                         this flag is ignored if it is not used with -e or -f argument.";
     std::cerr << "      -l lang          : Change the language of scilab ( default : en_US )." << std::endl;
     std::cerr << "      -nw              : Enable console mode." << std::endl;
     std::cerr << "      -nwni            : Enable terminal mode." << std::endl;
@@ -144,6 +156,10 @@ static int get_option(const int argc, char *argv[], ScilabEngineInfo* _pSEI)
                 _pSEI->pstParseFile = argv[i];
             }
         }
+        else if (!strcmp("-quit", argv[i]))
+        {
+            _pSEI->iForceQuit = 1;
+        }
         else if (!strcmp("-version", argv[i]))
         {
             i++;
@@ -168,6 +184,33 @@ static int get_option(const int argc, char *argv[], ScilabEngineInfo* _pSEI)
                 _pSEI->pstExec = argv[i];
             }
         }
+        else if (!strcmp("-O", argv[i]))
+        {
+            i++;
+            if (argc >= i)
+            {
+                _pSEI->pstExec = argv[i];
+                _pSEI->iCodeAction = 0;
+            }
+        }
+        else if (!strcmp("-X", argv[i]))
+        {
+            i++;
+            if (argc >= i)
+            {
+                _pSEI->pstExec = argv[i];
+                _pSEI->iCodeAction = 1;
+            }
+        }
+        else if (!strcmp("-P", argv[i]))
+        {
+            i++;
+            if (argc >= i)
+            {
+                _pSEI->pstExec = argv[i];
+                _pSEI->iCodeAction = 2;
+            }
+        }
         else if (!strcmp("-l", argv[i]))
         {
             i++;
@@ -293,6 +336,26 @@ int main(int argc, char *argv[])
         setScilabMode(SCILAB_STD);
         setScilabInputMethod(&ConsoleRead);
         setScilabOutputMethod(&ConsolePrintf);
+
+#ifdef _MSC_VER
+        if (pSEI->iCodeAction != -1)
+        {
+            //manage calls from explorer ( double click on sce file , ... )
+            char* Cmd = (char*)MALLOC(((PATH_MAX * 2) + 1) * sizeof(char));
+            strcpy(Cmd, "");
+            int ret = CommandByFileExtension(pSEI->pstExec, pSEI->iCodeAction, Cmd);
+
+            if (ret && Cmd[0] != '\0')
+            {
+                pSEI->pstExec = Cmd; //Cmd must be freed in StartScilabEngine after process.
+            }
+            else
+            {
+                pSEI->iCodeAction = -1;
+            }
+        }
+#endif
+
 #if defined(__APPLE__)
         return initMacOSXEnv(pSEI);
 #endif // !defined(__APPLE__)
@@ -312,8 +375,12 @@ int main(int argc, char *argv[])
     int val = setjmp(ScilabJmpEnv);
     if (!val)
     {
-        StartScilabEngine(pSEI);
-        iRet = RunScilabEngine(pSEI);
+        iRet = StartScilabEngine(pSEI);
+        if (iRet == 0)
+        {
+            iRet = RunScilabEngine(pSEI);
+        }
+
         StopScilabEngine(pSEI);
         FREE(pSEI);
         return iRet;