/*************************************** * * * Copyright (c) 1998 Jean-Eric Pin * * All rights reserved. * * * * TAB = 2 spaces * * * ***************************************/ /*------------------------------------------------------------------- * Preferences.c Jean-Eric Pin 17/04/97 *------------------------------------------------------------------- */ /************************************************** * * Structure du fichier de préférences : * 1.00 % Version de Semigroupe * F % Langue * 1 % Etat initial 1 par defaut * **************************************************/ #include <stdlib.h> #include <stdio.h> #include <fcntl.h> #include <ctype.h> #include <string.h> #include <errno.h> #include "Erreurs.h" #include "Globales.h" #include "Main.h" #include "Memoire.h" #include "Preferences.h" #include "Utilitaires.h" #if SYSTEME == MAC #include <unix.h> #endif #include "FichierUnix.h" extern char **Messages; extern float Version; /* Version de Semigroupe */ static char Langue = 'E'; /* Par défaut */ char *Yes; char *No; extern char DirHome[255], CheminExemples[255], CheminLaTeX[255], DirExemples[255], DirLaTeX[255]; /************************************************* * * Oui dans toutes les langues ! * *************************************************/ char YesAllemand[2] = {'j', 'J'}; char YesAnglais[2] = {'y', 'Y'}; char YesItalien[2] = {'s', 'S'}; char YesFrancais[2] = {'o', 'O'}; char YesPortugais[2] = {'s', 'S'}; char YesEspagnol[2] = {'s', 'S'}; /************************************************* * * Non dans toutes les langues ! * *************************************************/ char NoAllemand[2] = {'n', 'N'}; char NoAnglais[2] = {'n', 'N'}; char NoFrancais[2] = {'n', 'N'}; char NoItalien[2] = {'n', 'N'}; char NoPortugais[2] = {'n', 'N'}; char NoEspagnol[2] = {'n', 'N'}; /************************************************** * * MessagesExemples * **************************************************/ void MessagesExemples(void) { printf("%s\n", Messages[M_Path_Examples]); /* Donner le chemin d'accès aux fichiers d'exemples */ printf("%s\n", Messages[M_Path_exists]); #if SYSTEME == MAC || SYSTEME == UNIX printf("%s\n", Messages[M_Path_UNIX_Examples]); #elif SYSTEME == WINDOWS printf("%s\n", Messages[M_Path_WINDOWS_Examples]); #endif scanf("%s", CheminExemples); } /************************************************** * * MessagesLaTeXExemples * **************************************************/ void MessagesLaTeXExemples(void) { printf("%s ", Messages[M_Path_LaTeX]); printf("%s\n", Messages[M_Path_exists]); /* Donner le chemin d'accès aux fichiers d'exemples */ #if SYSTEME == MAC || SYSTEME == UNIX printf("%s\n", Messages[M_Path_UNIX_LaTeX]); #elif SYSTEME == WINDOWS printf("%s\n", Messages[M_Path_WINDOWS_LaTeX]); #endif scanf("%s", CheminLaTeX); } /************************************************** * * CreationPreferences * **************************************************/ void CreationPreferences(char *CheminPref) { MessagesExemples(); MessagesLaTeXExemples(); EcriturePreferences(CheminPref); } /************************************************** * * EcriturePreferences * **************************************************/ void EcriturePreferences(char *CheminPref) { FILE *fichier; /* Fichiers KR p.158 */ int retour, erreur; fichier = fopen(CheminPref, "w"); if (fichier == 0) { erreur = errno; Erreur_fopen(erreur); printf("Le fichier %s n'a pu être créé !\n", CheminPref); printf("Problème à la création du fichier des préférences\n"); /* La langue n'est pas encore connue et Messages n'est pas initialisé à ce stade ! */ } else { fprintf(fichier, "%8f %% Version de Semigroupe\n", Version); fprintf(fichier, "%8c %% Langue\n", Langue); fprintf(fichier, "%s %% Chemin du repertoire des exemples\n", CheminExemples); fprintf(fichier, "%s %% Chemin du repertoire LaTeX\n", CheminLaTeX); retour = fclose(fichier); if (retour != 0) { erreur = errno; Erreur_fclose(erreur); printf("Problème à la fermeture de %s !\n", NOM_PREF); } } } /************************************************** * * LecturePreferences * **************************************************/ void LecturePreferences(char *CheminPref, char *DirBABEL) { FILE *fichier; /* Fichiers KR p.158 */ char buffer[TAILLE_BUFFER]; int erreur, retour; fichier = fopen(CheminPref, "r"); if (fichier == 0) { erreur = errno; Erreur_fopen(erreur); printf("Le fichier %s n'a pu être ouvert !\n", CheminPref); printf("Impossible de trouver les préférences ! Création d'un nouveau fichier\n"); /* La langue n'est pas encore connue et Messages n'est pas initialisé ! */ Langue = 'E'; /* Par defaut, on prend l'anglais */ ChoixLangue(DirBABEL); CreationPreferences(CheminPref); } else { fgets(buffer, TAILLE_BUFFER, fichier); /* Version ignorée pour l'instant */ if (fscanf(fichier, "%1s %% Language (D = German, E = English, F = French, I = Italian, P = Portuguese, S = Spanish)", &Langue) != 1) { printf("scanf erreur (Langue) \n"); exit(1); } if (fscanf(fichier, "%s %% Path of the Examples folder", CheminExemples) != 1) { printf("scanf erreur (Path of the Examples folder) \n"); exit(1); } if (fscanf(fichier, "%s %% Path of the LaTeXFiles folder", CheminLaTeX) != 1) { printf("scanf erreur (Path of the LaTeXFiles folder) \n"); exit(1); } retour = fclose(fichier); if (retour != 0) { erreur = errno; Erreur_fclose(erreur); printf("Problème à la fermeture de %s !\n", NOM_PREF); } else { strcpy(DirExemples, ""); strcat(DirExemples, DirHome); strcpy(DirLaTeX, ""); strcat(DirLaTeX, DirHome); #if SYSTEME == MAC || SYSTEME == UNIX strcat(DirExemples, "/"); strcat(DirLaTeX, "/"); #elif SYSTEME == WINDOWS strcat(DirExemples, "\\"); strcat(DirLaTeX, "\\"); #endif strcat(DirExemples, CheminExemples); strcat(DirLaTeX, CheminLaTeX); #if SYSTEME == MAC || SYSTEME == UNIX strcat(DirExemples, "/"); strcat(DirLaTeX, "/"); #elif SYSTEME == WINDOWS strcat(DirExemples, "\\"); strcat(DirLaTeX, "\\"); #endif } ChoixLangue(DirBABEL); } } /************************************ * * ModificationLangue. * ************************************/ void ModificationLangue(char *CheminPref, char *DirBABEL) { FILE *fichier; /* Fichiers KR p.158 */ int erreur; printf("Français (F) Brasileiro (B) Deutsch (D) English (E) Italiano (I)\n" "Portugues (P) Español (S) : "); do { scanf("%c", &Langue); } while (!((Langue == 'F') || (Langue == 'f') || (Langue == 'D') || (Langue == 'd') || (Langue == 'E') || (Langue == 'e') || (Langue == 'B') || (Langue == 'b') || (Langue == 'P') || (Langue == 'p') || (Langue == 'I') || (Langue == 'i') || (Langue == 'S') || (Langue == 's') )); printf("\n"); fichier = fopen(CheminPref, "w"); if (fichier == 0) { erreur = errno; Erreur_fopen(erreur); printf("File %s couldn't be opened !\n", CheminPref); printf("Impossible de trouver les preferences ! Cretion d'un nouveau fichier\n"); /* La langue n'est pas encore connue et Messages n'est pas initialisé ! */ Langue = 'E'; /* Par defaut, on prend l'anglais */ ChoixLangue(DirBABEL); CreationPreferences(CheminPref); } else { fprintf(fichier, "%8f %% Version number of Semigroupe\n", Version); fprintf(fichier, "%8c %% Language (D = German, E = English, F = French, I = Italian, P = Portuguese, S = Spanish)\n", Langue); fprintf(fichier, "%s %% Path of the Examples folder\n", CheminExemples); fprintf(fichier, "%s %% Path of the LaTeXFiles folder\n", CheminLaTeX); Fermeture(fichier); } ChoixLangue(DirBABEL); } /************************************ * * ModificationCheminExemples. * ************************************/ void ModificationCheminExemples(char *CheminPref) { MessagesExemples(); EcriturePreferences(CheminPref); strcpy(DirExemples, ""); strcat(DirExemples, DirHome); #if SYSTEME == MAC || SYSTEME == UNIX strcat(DirExemples, "/"); #elif SYSTEME == WINDOWS strcat(DirExemples, "\\"); #endif strcat(DirExemples, CheminExemples); #if SYSTEME == MAC || SYSTEME == UNIX strcat(DirExemples, "/"); #elif SYSTEME == WINDOWS strcat(DirExemples, "\\"); #endif } /************************************ * * ModificationCheminLaTeX. * ************************************/ void ModificationCheminLaTeX(char *CheminPref) { MessagesLaTeXExemples(); EcriturePreferences(CheminPref); strcpy(DirLaTeX, ""); strcat(DirLaTeX, DirHome); #if SYSTEME == MAC || SYSTEME == UNIX strcat(DirLaTeX, "/"); #elif SYSTEME == WINDOWS strcat(DirLaTeX, "\\"); #endif #if SYSTEME == MAC || SYSTEME == UNIX strcat(DirLaTeX, "/"); #elif SYSTEME == WINDOWS strcat(DirLaTeX, "\\"); #endif } /************************************ * * ModificationPreferences. * ************************************/ void ModificationPreferences(char *CheminPref, char *DirBABEL) { short OptionMenu; printf("%s\n", Messages[M_Give_your_choice]); /* Donner votre choix */ printf("(%1d) %s\n", Option_Langue, Messages[M_Langue]); /* Changement de langue */ printf("(%1d) %s\n", Option_Chemin, Messages[M_Chemin_Exemples]); /* Modification du chemin des exemples */ printf("(%1d) %s\n", Option_CheminLaTeX, Messages[M_Chemin_ExemplesLaTeX]); /* Modification du chemin des exemples */ do { if (scanf("%hd", &OptionMenu) != 1) { printf("scanf errno\n"); exit(1); } } while ((OptionMenu < Option_Langue) || (OptionMenu > Option_CheminLaTeX)); switch (OptionMenu) { case Option_Langue: ModificationLangue(CheminPref, DirBABEL); break; case Option_Chemin: ModificationCheminExemples(CheminPref); break; case Option_CheminLaTeX: ModificationCheminLaTeX(CheminPref); break; } } /********************** * * ChoixLangue. * **********************/ void ChoixLangue(char *DirBABEL) { FILE *fichier; /* Fichiers KR p.158 */ char buffer[TAILLE_BUFFER]; char Nom[LONGUEUR_NOM] = ""; char NomLong[LONGUEUR_NOM_LONG] = ""; short i = 0; short longueur; int erreur; switch (Langue) { case 'F' : case 'f' : strcpy(Nom, "Francais"); Yes = &YesFrancais[0]; No = &NoFrancais[0]; break; case 'E': case 'e': strcpy(Nom, "English"); Yes = &YesAnglais[0]; No = &NoAnglais[0]; break; case 'B': case 'b': strcpy(Nom, "Brasileiro"); Yes = &YesPortugais[0]; No = &NoPortugais[0]; break; case 'D': case 'd': strcpy(Nom, "Deutsch"); Yes = &YesAllemand[0]; No = &NoAllemand[0]; break; case 'I': case 'i': strcpy(Nom, "Italiano"); Yes = &YesItalien[0]; No = &NoItalien[0]; break; case 'P' : case 'p' : strcpy(Nom, "Portugues"); Yes = &YesPortugais[0]; No = &NoPortugais[0]; break; case 'S' : case 's' : strcpy(Nom, "Espanol"); Yes = &YesEspagnol[0]; No = &NoEspagnol[0]; break; default : strcpy(Nom, "Francais"); Yes = &YesFrancais[0]; No = &NoFrancais[0]; break; } strcpy(NomLong, DirBABEL); strcat(NomLong, Nom); fichier = fopen(NomLong, "r"); if (fichier == 0) { erreur = errno; Erreur_fopen(erreur); printf("DirBABEL = %s\n", DirBABEL); printf("Le fichier %s n'a pu être ouvert !\n", NomLong); printf("ChoixLangue interrompu !"); } else { while ((longueur = LireLigne(buffer, TAILLE_BUFFER, fichier)) != 0) if ((buffer[0] != '/') && (isspace(buffer[0]) == 0)) /* On élimine les lignes blanches et les commentaires */ { Messages[i] = ALLOC(char, longueur); if (Messages[i] == NULL) { printf("%s %s\n", Messages[M_Pb_memory], Messages[M_Pb_messages]); /* Problème lors de l'allocation mémoire des messages. */ exit(1); } strncpy(Messages[i++], buffer, longueur-1); } Fermeture(fichier); } }