loadsavelanguage.c

Go to the documentation of this file.
00001 /*-----------------------------------------------------------------------------------*/
00002 /* INRIA 2007 */
00003 /* Allan CORNET */
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         /* Modification Restauration depuis la base de registre dans 
00138         HKEY_CURRENT_USER\\SOFTWARE\\Scilab\\"VERSION"\\Settings\\LANGUAGE
00139         "Version" correspondant à la version de Scilab
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         /* Modification Sauvegarde dans la base de registre dans 
00175         HKEY_CURRENT_USER\\SOFTWARE\\Scilab\\"VERSION"\\Settings\\LANGUAGE
00176         "Version" correspondant à la version de Scilab
00177         Sauvegarde dans HKEY_CURRENT_USER car données dépendant de l'utilisateur
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 

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