CallScilab.c

Go to the documentation of this file.
00001 /*-----------------------------------------------------------------------------------*/
00002 /* INRIA 2005 */
00003 /* Allan CORNET */
00004 /*-----------------------------------------------------------------------------------*/
00005 #include "CallScilab.h"
00006 #include "MALLOC.h"
00007 #include "../../../graphics/includes/WindowList.h"
00008 #include "../../../graphics/includes/GetProperty.h"
00009 #include "setgetSCIpath.h"
00010 #include "fromc.h"
00011 #include "sciquit.h"
00012 #include "tmpdir.h"
00013 #include "fromc.h"
00014 #include "inisci-c.h"
00015 #include "scirun.h"
00016 
00017 #ifdef _MSC_VER
00018 #define putenv _putenv
00019 #endif
00020 
00021 /*-----------------------------------------------------------------------------------*/
00022 static char DefaultScilabStartup[]="SCI/etc/scilab.start";
00023 static char DefaultScilabQuit[]="SCI/etc/scilab.quit";
00024 static char DefaultSCIenv[]="../..";
00025 static int DefaultStacksize=1000000;
00026 static int StartScilabIsOK=FALSE;
00027 /*-----------------------------------------------------------------------------------*/
00028 extern int setenvc(char *string,char *value);
00029 extern int C2F(inisci)(int *,int *,int *);
00030 extern int C2F(ismenu)();
00031 /*-----------------------------------------------------------------------------------*/
00032 #ifdef _MSC_VER
00033 extern char *GetScilabDirectory(BOOL UnixStyle);
00034 extern void InitWindowGraphDll(void);
00035 extern void TextMessage1 (int ctrlflag);
00036 extern void set_sci_env(char *DefaultSCIPATH);
00037 #else
00038 extern int C2F(sxevents)();
00039 #endif
00040 /*-----------------------------------------------------------------------------------*/
00041 #ifdef _MSC_VER
00042 static void SetSciEnv(void)
00043 {
00044   char *ScilabDirectory=NULL;
00045 
00046   ScilabDirectory=GetScilabDirectory(TRUE);
00047 
00048   if (ScilabDirectory == NULL)
00049   {
00050         MessageBox (NULL, "Error", "GetScilabDirectory()", MB_ICONSTOP | MB_OK);
00051         exit(1);
00052   }
00053   set_sci_env(ScilabDirectory);
00054 
00055   if (ScilabDirectory){FREE(ScilabDirectory);ScilabDirectory=NULL;}             
00056   
00057 }
00058 #endif
00059 /*-----------------------------------------------------------------------------------*/
00060 void DisableInteractiveMode(void)
00061 {
00062         SetWITH_GUI(FALSE);
00063 }
00064 /*-----------------------------------------------------------------------------------*/
00065 int StartScilab(char *SCIpath,char *ScilabStartup,int *Stacksize)
00066 {
00067         int bOK=FALSE;
00068 
00069         char *ScilabStartupUsed=NULL;
00070         char *InitStringToScilab=NULL;
00071         int StacksizeUsed=0;
00072         int lengthStringToScilab=0;
00073 
00074         static int iflag=-1,ierr=0;
00075 
00076         if (StartScilabIsOK) return bOK;
00077 
00078         SetFromCToON();
00079 
00080         if (SCIpath==NULL)
00081         {
00082                 #ifdef _MSC_VER
00083                         SetSciEnv();
00084                 #else
00085                 {
00086                         char env[2048];
00087                         setSCIpath(SCIpath);
00088                         sprintf(env,"SCI=%s",SCIpath);
00089                         putenv(env);
00090                 }
00091                 #endif
00092         }
00093         else
00094         {
00095                 char env[2048];
00096                 setSCIpath(SCIpath);
00097                 sprintf(env,"SCI=%s",SCIpath);
00098                 putenv(env);
00099         }
00100 
00101         if (ScilabStartup==NULL)
00102         {
00103                 ScilabStartupUsed=(char*)MALLOC((strlen(DefaultScilabStartup)+1)*sizeof(char));
00104                 sprintf(ScilabStartupUsed,"%s",DefaultScilabStartup);
00105         }
00106         else
00107         {
00108                 ScilabStartupUsed=(char*)MALLOC((strlen(DefaultScilabStartup)+1)*sizeof(char));
00109                 sprintf(ScilabStartupUsed,"%s",ScilabStartup);
00110         }
00111         
00112         if (Stacksize==NULL)
00113         {
00114                 StacksizeUsed=DefaultStacksize;
00115         }
00116         else
00117         {
00118                 StacksizeUsed=*Stacksize;
00119         }
00120 
00121         /* running the startup */ 
00122         C2F(settmpdir)();
00123 
00124         /* Scilab Initialization */ 
00125         C2F(inisci)(&iflag,&StacksizeUsed,&ierr);
00126 
00127         if ( ierr > 0 ) 
00128     {
00129           bOK=FALSE;
00130       return bOK;
00131     }
00132 
00133 #ifdef _MSC_VER
00134         InitWindowGraphDll();
00135 #endif
00136 
00137         lengthStringToScilab=(int)(strlen("exec(\"SCI/etc/scilab.start\",-1);quit;")+strlen(ScilabStartupUsed));
00138         InitStringToScilab=(char*)MALLOC(lengthStringToScilab*sizeof(char));
00139         sprintf(InitStringToScilab,"exec(\"%s\",-1);quit;",ScilabStartupUsed);
00140         
00141         C2F(scirun)(InitStringToScilab,strlen(InitStringToScilab));
00142 
00143         if (ScilabStartupUsed) {FREE(ScilabStartupUsed);ScilabStartupUsed=NULL;}
00144         if (InitStringToScilab) {FREE(InitStringToScilab);InitStringToScilab=NULL;}
00145 
00146         bOK=TRUE;
00147         StartScilabIsOK=TRUE;
00148 
00149         return bOK;
00150 }
00151 /*-----------------------------------------------------------------------------------*/
00152 int TerminateScilab(char *ScilabQuit)
00153 {
00154         int bOK=FALSE;
00155 
00156         if (StartScilabIsOK)
00157         {
00158                 ExitScilab();
00159                 StartScilabIsOK=FALSE;
00160                 bOK=TRUE;
00161         }
00162 
00163         return bOK;
00164 }
00165 /*-----------------------------------------------------------------------------------*/
00166 void ScilabDoOneEvent(void)
00167 {
00168         if ( GetWITH_GUI() )
00169         {
00170                 #ifdef _MSC_VER
00171                         TextMessage1 (1);
00172                 #else 
00173                         C2F(sxevents)();
00174                 #endif
00175 
00176                 while(C2F(ismenu)()==1 ) 
00177                 {
00178                         C2F(scirun)("quit;",(int)strlen("quit;"));
00179                 }
00180         }
00181 }
00182 /*-----------------------------------------------------------------------------------*/
00183 int ScilabHaveAGraph(void)
00184 {
00185         integer iflag =0,ids,num;
00186         int vInt=0;
00187 
00188         if ( GetWITH_GUI() )
00189         {
00190                         
00191           sciGetIdFigure (&ids,&num,&iflag);
00192           if (num > 0) { vInt = 1 ; }
00193         }
00194         else
00195         {
00196                 vInt=0;
00197         }
00198 
00199         return vInt;
00200 }
00201 /*-----------------------------------------------------------------------------------*/

Generated on Sun Mar 4 15:03:45 2007 for Scilab [trunk] by  doxygen 1.5.1