TclUiGet.c

Go to the documentation of this file.
00001 /*-----------------------------------------------------------------------------------*/
00002 /* INRIA 2005 */
00003 /* Allan CORNET */
00004 /*-----------------------------------------------------------------------------------*/
00005 #include "TclUiGet.h"
00006 #include "sci_TCL_GetVar.h"
00007 /*-----------------------------------------------------------------------------------*/
00008 extern int GetScreenProperty(char *prop, char *value);
00009 /*-----------------------------------------------------------------------------------*/
00010 int TCL_UiGet(int  Handle,int RhsPropertieField)
00011 {
00012         #define StrMax 200
00013 
00014         int bOK=0;
00015         static int l1,n1,m1;
00016         char MyTclCommand[2048];
00017         
00018         if (Handle == 0)
00019         {
00020                 if (GetType(RhsPropertieField) == sci_strings)
00021                 {
00022                         char *StrField=NULL;
00023                         char *StrValue=NULL;
00024                         int nbelem=0;
00025                         double *MatrixOut=NULL;
00026 
00027                         GetRhsVar(RhsPropertieField,"c",&m1,&n1,&l1);
00028                         StrField=cstk(l1);
00029                         StrValue=(char*)MALLOC((StrMax+1)*sizeof(char));
00030 
00031                         if(!GetScreenProperty(StrField,StrValue))
00032                         {
00033                                 MatrixOut=String2Matrix(StrValue,&nbelem);
00034                                 n1=1;
00035                                 m1=nbelem;
00036                                 CreateVarFromPtr(Rhs+1, "d", &n1, &m1, &MatrixOut);
00037                                 if (MatrixOut) {FREE(MatrixOut); MatrixOut=NULL;}
00038                         }
00039                         else
00040                         {
00041                                 if (StrValue) {FREE(StrValue); StrValue=NULL;}
00042                                 Scierror(999,TCL_ERROR30,StrField);
00043                                 return 0;
00044                         }
00045                         if (StrValue) {FREE(StrValue); StrValue=NULL;}
00046                         bOK=1;
00047                 }
00048                 else
00049                 {
00050                         Scierror(999,TCL_ERROR8);
00051                         return 0;
00052                 }
00053         }
00054         else
00055         {
00056                 if (Handle>0)
00057                 {
00058                         if (GetType(RhsPropertieField)==sci_strings)
00059                         {
00060                                 static int local_l1,local_n1,local_m1;
00061                                 char *StrField=NULL;
00062 
00063                                 GetRhsVar(RhsPropertieField,"c",&local_m1,&local_n1,&local_l1);
00064                                 StrField=cstk(local_l1);
00065                                 nocase(StrField);
00066 
00067                                 if (strcmp(StrField,"userdata")==0)
00068                                 {
00069                                         char VarName[64];
00070                                         sprintf(VarName,"USERDATA_%d",Handle);
00071 
00072                                         if (TCL_ArrayExist(TCLinterp,VarName))
00073                                         {
00074                                                 int i=0,j=0;
00075                                                 int nrow=0,ncol=0;
00076                                                 int k=0;
00077 
00078                                                 char **ReturnArrayString=NULL;
00079 
00080                                                 TCL_ArrayDim(TCLinterp,VarName,&ncol,&nrow);
00081                                                 ReturnArrayString = (char **) MALLOC(ncol*nrow*sizeof(char **));
00082                                                 k=0;
00083                                                 for (j=1;j<ncol+1;j++)  for (i=1;i<nrow+1;i++)
00084                                                 {
00085                                                         char *RetStr=NULL;
00086                                                         char *AsciiFromUTF8=NULL;
00087 
00088                                                         RetStr=TCL_ArrayGetVar(TCLinterp,VarName,i,j);
00089                                                         AsciiFromUTF8=UTF8toANSI(TCLinterp,RetStr);
00090 
00091                                                         ReturnArrayString[k++]=AsciiFromUTF8;
00092                                                 }
00093 
00094                                                 CreateVarFromPtr(Rhs+1, "S", &nrow, &ncol, ReturnArrayString);
00095 
00096                                                 for (i=0;i<ncol;i++) for (j=0;j<nrow;j++) { FREE(ReturnArrayString[i+ncol*j]);ReturnArrayString[i+ncol*j]=NULL; }
00097                                                 FREE(ReturnArrayString);
00098                                                 bOK=1;
00099 
00100                                         }
00101                                         else
00102                                         {
00103                                                 char *RetStr=NULL;
00104 
00105                                                 RetStr= (char*)Tcl_GetVar(TCLinterp, VarName, TCL_GLOBAL_ONLY);
00106                                                 if ( RetStr )
00107                                                 {
00108                                                         char *AsciiFromUTF8=NULL;
00109                                                         char *output=NULL ;
00110 
00111                                                         AsciiFromUTF8=UTF8toANSI(TCLinterp,RetStr);
00112 
00113                                                         output=(char*)MALLOC((strlen(AsciiFromUTF8)+1)*sizeof(char));
00114                                                         sprintf(output,"%s",AsciiFromUTF8);
00115                                                         CreateVarFromPtr( 1, "c",(m1=(int)strlen(output), &m1),&n1,&output);
00116 
00117                                                         if (output) {FREE(output);output=NULL;}
00118                                                         if (AsciiFromUTF8){FREE(AsciiFromUTF8);AsciiFromUTF8=NULL;}
00119                                                         bOK=1;
00120                                                 }
00121                                                 else
00122                                                 {
00123                                                         Scierror(999,TCL_ERROR18);
00124                                                         return 0;
00125                                                 }
00126                                         }
00127                                 }
00128                                 else
00129                                 {
00130                                         if (strcmp(StrField,"string")==0)
00131                                         {
00132                                                 char VarName[64];
00133                                                 sprintf(VarName,"STRING_%d",Handle);
00134                                                 if (TCL_ArrayExist(TCLinterp,VarName))
00135                                                 {
00136                                                         int i=0,j=0;
00137                                                         int nrow=0,ncol=0;
00138                                                         int k=0;
00139 
00140                                                         char **ReturnArrayString=NULL;
00141 
00142                                                         TCL_ArrayDim(TCLinterp,VarName,&ncol,&nrow);
00143                                                         ReturnArrayString = (char **) MALLOC(ncol*nrow*sizeof(char **));
00144                                                         k=0;
00145                                                         for (j=1;j<ncol+1;j++)  for (i=1;i<nrow+1;i++)
00146                                                         {
00147                                                                 char *RetStr=NULL;
00148                                                                 char *AsciiFromUTF8=NULL;
00149 
00150                                                                 RetStr=TCL_ArrayGetVar(TCLinterp,VarName,i,j);
00151                                                                 AsciiFromUTF8=UTF8toANSI(TCLinterp,RetStr);
00152 
00153                                                                 ReturnArrayString[k++]=AsciiFromUTF8;
00154                                                         }
00155 
00156                                                         /*CreateVarFromPtr(Rhs+1, "S", &nrow, &ncol, ReturnArrayString);*/
00157 
00158                                                         for (i=0;i<ncol;i++) for (j=0;j<nrow;j++) { FREE(ReturnArrayString[i+ncol*j]);ReturnArrayString[i+ncol*j]=NULL; }
00159                                                         FREE(ReturnArrayString);
00160                                                         bOK=1;
00161 
00162                                                 }
00163                                                 else
00164                                                 {
00165                                                         char *RetStr=NULL;
00166 
00167                                                         RetStr= (char*)Tcl_GetVar(TCLinterp, VarName, TCL_GLOBAL_ONLY);
00168                                                         if ( RetStr )
00169                                                         {
00170                                                                 char *AsciiFromUTF8=NULL;
00171                                                                 char *output=NULL ;
00172 
00173                                                                 AsciiFromUTF8=UTF8toANSI(TCLinterp,RetStr);
00174 
00175                                                                 output=(char*)MALLOC((strlen(AsciiFromUTF8)+1)*sizeof(char));
00176                                                                 sprintf(output,"%s",AsciiFromUTF8);
00177                                                                 /*CreateVarFromPtr( 1, "c",(m1=strlen(output), &m1),&n1,&output);*/
00178 
00179                                                                 if (output) {FREE(output);output=NULL;}
00180                                                                 if (AsciiFromUTF8){FREE(AsciiFromUTF8);AsciiFromUTF8=NULL;}
00181                                                                 bOK=1;
00182                                                         }
00183                                                         else
00184                                                         {
00185                                                                 Scierror(999,TCL_ERROR18);
00186                                                                 return 0;
00187                                                         }
00188                                                 }
00189 
00190                                                 /* Block inutile apres modifications dans get.tcl */
00191                                                 {
00192                                                         char *StrValue=NULL;
00193                                                         sprintf(MyTclCommand,"set TclScilabTmpVar [GetField %d \"%s\"]", Handle, StrField);
00194 
00195                                                         if ( Tcl_Eval(TCLinterp,MyTclCommand) == TCL_ERROR  )
00196                                                         {
00197                                                                 Scierror(999,TCL_ERROR4,TCLinterp->result);
00198                                                                 return 0;
00199                                                         }
00200 
00201                                                         StrValue = (char*)Tcl_GetVar(TCLinterp, "TclScilabTmpVar", TCL_GLOBAL_ONLY);
00202 
00203                                                         if (StrValue)
00204                                                         {
00205                                                                 char *AsciiFromUTF8=NULL;
00206 
00207                                                                 AsciiFromUTF8=UTF8toANSI(TCLinterp,StrValue);
00208                                                                 m1=(int)strlen(AsciiFromUTF8);
00209                                                                 n1=1;
00210                                                                 CreateVar(Rhs+1, "c", &m1,&n1,&l1);
00211                                                                 sprintf(cstk(l1),"%s",AsciiFromUTF8);
00212                                                                 bOK=1;
00213                                                         }
00214                                                         else
00215                                                         {
00216                                                                 Scierror(999,TCL_ERROR31);
00217                                                                 return 0;
00218                                                         }
00219                                                 }
00220                                         }
00221                                         else
00222                                         {
00223                                                 char *StrValue=NULL;
00224                                                 sprintf(MyTclCommand,"set TclScilabTmpVar [GetField %d \"%s\"]", Handle, StrField);
00225 
00226                                                 if ( Tcl_Eval(TCLinterp,MyTclCommand) == TCL_ERROR  )
00227                                                 {
00228                                                         Scierror(999,TCL_ERROR4,TCLinterp->result);
00229                                                         return 0;
00230                                                 }
00231                                                 StrValue = (char*)Tcl_GetVar(TCLinterp, "TclScilabTmpVar", TCL_GLOBAL_ONLY);
00232 
00233                                                 if (StrValue)
00234                                         {
00235                                                 char *AsciiFromUTF8=NULL;
00236                                                 AsciiFromUTF8=UTF8toANSI(TCLinterp,StrValue);
00237 
00238                                                 if ( MustReturnAMatrix(StrField) )
00239                                                 {
00240                                                         int nbelem=0;
00241                                                         double *MatrixOut=NULL;
00242 
00243                                                         MatrixOut=String2Matrix(AsciiFromUTF8,&nbelem);
00244                                                         n1=1;
00245                                                         m1=nbelem;
00246                                                         CreateVarFromPtr(Rhs+1, "d", &n1, &m1, &MatrixOut);
00247                                                         if (MatrixOut) {FREE(MatrixOut); MatrixOut=NULL;}
00248                                                         bOK=1;
00249                                                 }
00250                                                 else
00251                                                 if ( MustReturnAString(StrField) )
00252                                                 {
00253                                                         m1=(int)strlen(AsciiFromUTF8);
00254                                                         n1=1;
00255                                                         CreateVar(Rhs+1, "c", &m1,&n1,&l1);
00256                                                         sprintf(cstk(l1),"%s",AsciiFromUTF8);
00257                                                         bOK=1;
00258                                                 }
00259                                                 else
00260                                                 {
00261                                                         Scierror(999,TCL_ERROR30,StrField);
00262                                                         return 0;
00263                                                 }
00264                                                 if (AsciiFromUTF8){FREE(AsciiFromUTF8);AsciiFromUTF8=NULL;}
00265 
00266                                                 Tcl_UnsetVar(TCLinterp, "TclScilabTmpVar", TCL_GLOBAL_ONLY);
00267                                         }
00268                                                 else
00269                                                 {
00270                                                         Scierror(999,TCL_ERROR31);
00271                                                         return 0;
00272                                                 }
00273                                         }
00274                 }
00275                 }
00276                         else
00277                         {
00278                                 Scierror(999,TCL_ERROR8);
00279                                 return 0;
00280                         }
00281                 }
00282                 else
00283                 {
00284                         Scierror(999,TCL_ERROR34);
00285                         return 0;
00286                 }
00287         }
00288         return bOK;
00289 }
00290 /*-----------------------------------------------------------------------------------*/
00291 

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