00001
00002
00003
00004
00005 #if _MSC_VER
00006 #include <Windows.h>
00007 #include "version.h"
00008 #endif
00009 #include <stdio.h>
00010 #include <stdlib.h>
00011 #include <string.h>
00012 #include "loadsavelanguage.h"
00013 #include "setgetlanguage.h"
00014 #include "SCIHOME.h"
00015 #include "MALLOC.h"
00016 #include "iconv.h"
00017
00018 #define LINELENGTHMAX 1024
00019 #define TAGLANGUAGE "LANGUAGE"
00020
00021 #ifdef _MSC_VER
00022 #define SCILABREGISTRYKEY "SOFTWARE\\Scilab\\%s\\Settings"
00023 static BOOL loadlanguagepref_windows(void);
00024 static BOOL savelanguagepref_windows(void);
00025 #else
00026 static BOOL loadlanguagepref_linux(void);
00027 static BOOL savelanguagepref_linux(void);
00028 static char *getfilenamelanguagepref(void);
00029 #endif
00030
00031 BOOL loadlanguagepref(void)
00032 {
00033 #ifdef _MSC_VER
00034 return loadlanguagepref_windows();
00035 #else
00036 return loadlanguagepref_linux();
00037 #endif
00038 }
00039
00040 BOOL savelanguagepref(void)
00041 {
00042 #ifdef _MSC_VER
00043 return savelanguagepref_windows();
00044 #else
00045 return savelanguagepref_linux();
00046 #endif
00047 }
00048
00049 #ifndef _MSC_VER
00050 static BOOL loadlanguagepref_linux(void)
00051 {
00052 BOOL bOK=FALSE;
00053 char *filepref=NULL;
00054 FILE *fileR;
00055
00056 filepref=getfilenamelanguagepref();
00057
00058 if (filepref)
00059 {
00060 fileR= fopen(filepref, "rt");
00061 if (fileR)
00062 {
00063 char *LANGUAGE=NULL;
00064 char LINE[LINELENGTHMAX];
00065
00066 LANGUAGE=(char*)MALLOC(sizeof(char)*LINELENGTHMAX);
00067 fscanf(fileR, "%[^\n]", LINE);
00068 sscanf(&LINE[strlen(TAGLANGUAGE)+1],"%s",LANGUAGE);
00069 setlanguage(LANGUAGE,FALSE,TRUE);
00070
00071 fclose(fileR);
00072
00073 if (LANGUAGE){FREE(LANGUAGE);LANGUAGE=NULL;}
00074 bOK=TRUE;
00075 }
00076 }
00077
00078 return bOK;
00079 }
00080 #endif
00081
00082 #ifndef _MSC_VER
00083 static BOOL savelanguagepref_linux(void)
00084 {
00085 BOOL bOK=FALSE;
00086 char *filepref=NULL;
00087 FILE *fileW;
00088
00089 filepref=getfilenamelanguagepref();
00090
00091 if (filepref)
00092 {
00093 fileW= fopen(filepref, "wt");
00094 if (fileW)
00095 {
00096 char LINE[LINELENGTHMAX];
00097 char *LANGUAGE=NULL;
00098 LANGUAGE=getlanguage();
00099 sprintf(LINE,"%s=%s",TAGLANGUAGE,LANGUAGE);
00100 fputs(LINE,fileW);
00101 fputs("\n",fileW);
00102 fclose(fileW);
00103
00104 if (LANGUAGE){FREE(LANGUAGE);LANGUAGE=NULL;}
00105 bOK=TRUE;
00106 }
00107 }
00108 return bOK;
00109 }
00110 #endif
00111
00112 #ifndef _MSC_VER
00113 static char *getfilenamelanguagepref(void)
00114 {
00115 #if _MSC_VER
00116 #define namelanguagepref "\\language.ini"
00117 #else
00118 #define namelanguagepref "/.language"
00119 #endif
00120
00121 char *retFilename=NULL;
00122 char *SCIHOME=NULL;
00123
00124 SCIHOME=getSCIHOME();
00125
00126 retFilename=(char*)MALLOC((strlen(namelanguagepref)+strlen(SCIHOME)+1)*sizeof(char));
00127 sprintf(retFilename,"%s%s",SCIHOME,namelanguagepref);
00128
00129 return retFilename;
00130 }
00131 #endif
00132
00133 #if _MSC_VER
00134 static BOOL loadlanguagepref_windows(void)
00135 {
00136 BOOL bOK=FALSE;
00137
00138
00139
00140
00141 HKEY key;
00142
00143 char Clef[LINELENGTHMAX];
00144 int LanguageCode=0;
00145
00146 wsprintf(Clef,SCILABREGISTRYKEY,SCI_VERSION_STRING);
00147
00148 if ( RegOpenKeyEx(HKEY_CURRENT_USER, Clef, 0, KEY_QUERY_VALUE , &key) == ERROR_SUCCESS )
00149 {
00150 DWORD size=4;
00151 if ( RegQueryValueEx(key, TAGLANGUAGE, 0, NULL, (LPBYTE)&LanguageCode, &size) == ERROR_SUCCESS )
00152 {
00153 char *LANGUAGE=NULL;
00154 LANGUAGE=getlanguagefromcode(LanguageCode);
00155
00156 if (LANGUAGE)
00157 {
00158 setlanguage(LANGUAGE,FALSE,TRUE);
00159 bOK=TRUE;
00160 FREE(LANGUAGE);
00161 LANGUAGE=NULL;
00162 }
00163 }
00164 RegCloseKey(key);
00165 }
00166 return bOK;
00167 }
00168 #endif
00169
00170 #if _MSC_VER
00171 static BOOL savelanguagepref_windows(void)
00172 {
00173 BOOL bOK=FALSE;
00174
00175
00176
00177
00178
00179 HKEY key;
00180 DWORD result,dwsize=4;
00181 char Clef[LINELENGTHMAX];
00182 char *LANGUAGE=NULL;
00183 int LanguageCode=0;
00184
00185 LANGUAGE=getlanguage();
00186 LanguageCode=getcodefromlanguage(LANGUAGE);
00187 if (LANGUAGE) {FREE(LANGUAGE);LANGUAGE=NULL;}
00188
00189 wsprintf(Clef,SCILABREGISTRYKEY,SCI_VERSION_STRING);
00190
00191 if (RegCreateKeyEx(HKEY_CURRENT_USER, Clef, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &key, &result) == ERROR_SUCCESS)
00192 {
00193 if ( RegSetValueEx(key, TAGLANGUAGE, 0, REG_DWORD, (LPBYTE)&LanguageCode, dwsize) == ERROR_SUCCESS)
00194 {
00195 bOK=TRUE;
00196 }
00197 RegCloseKey(key);
00198 }
00199 return bOK;
00200 }
00201 #endif
00202
00203