00001
00002
00003
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
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
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
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