00001
00002
00003
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
00122 C2F(settmpdir)();
00123
00124
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