/*************************************** * * * Copyright (c) 1998 Jean-Eric Pin * * All rights reserved. * * * * TAB = 2 spaces * * * ***************************************/ /*------------------------------------------------------------------- * Preferences.c Jean-Eric Pin 17/04/97 *------------------------------------------------------------------- */ /************************************************** * * Structure du fichier de preferences : * 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 defaut */ unsigned short EtatInitial1 = 1; /* Par defaut */ char *Yes; char *No; extern char DirHome[255], CheminExemples[255], DirExemples[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'}; /************************************************** * * CreationPreferences * **************************************************/ void CreationPreferences(char *CheminPref) { FILE *fichier; /* Fichiers KR p.158 */ int retour, erreur; printf("%s ", Messages[M_Path_Examples]); printf("%s\n", Messages[M_Path_exists]); /* Donner le chemin d'acces aux fichiers d'exemples */ #if SYSTEME == MAC printf("%s\n", Messages[M_Path_MAC]); #elif SYSTEME == UNIX printf("%s\n", Messages[M_Path_UNIX]); #endif scanf("%s", CheminExemples); fichier = fopen(CheminPref, "w"); if (fichier == 0) { erreur = errno; Erreur_fopen(erreur); printf("Le fichier %s n'a pu etre cree !\n", CheminPref); printf("Probleme a la creation du fichier des preferences\n"); /* La langue n'est pas encore connue et Messages n'est pas initialise a 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); retour = fclose(fichier); if (retour != 0) { erreur = errno; Erreur_fclose(erreur); printf("Probleme a 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 etre ouvert !\n", CheminPref); printf("Impossible de trouver les preferences ! Creation d'un nouveau fichier\n"); /* La langue n'est pas encore connue et Messages n'est pas initialise ! */ Langue = 'E'; /* Par defaut, on prend l'anglais */ ChoixLangue(DirBABEL); CreationPreferences(CheminPref); } else { fgets(buffer, TAILLE_BUFFER, fichier); /* Version ignoree pour l'instant */ if (fscanf(fichier, "%1s %% Langue", &Langue) != 1) { printf("scanf erreur (Langue) \n"); exit(1); } if (fscanf(fichier, "%s %% Chemin du repertoire des exemples", CheminExemples) != 1) { printf("scanf erreur (Chemin exemples) \n"); exit(1); } retour = fclose(fichier); if (retour != 0) { erreur = errno; Erreur_fclose(erreur); printf("Probleme a la fermeture de %s !\n", NOM_PREF); } else { strcpy(DirExemples, ""); #if SYSTEME == UNIX strcat(DirExemples, DirHome); strcat(DirExemples, "/"); #endif strcat(DirExemples, CheminExemples); #if SYSTEME == MAC strcat(DirExemples, ":"); #elif SYSTEME == UNIX strcat(DirExemples, "/"); #endif } ChoixLangue(DirBABEL); } } /************************************ * * ModificationLangue. * ************************************/ void ModificationLangue(char *CheminPref, char *DirBABEL) { FILE *fichier; /* Fichiers KR p.158 */ int erreur; short i; printf("Francais (F) Brasileiro (B) Deutsch (D) English (E) Italiano (I)\n" "Portugues (P) Espanol (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("Le fichier %s n'a pu etre ouvert !\n", CheminPref); printf("Impossible de trouver les preferences ! Creation d'un nouveau fichier\n"); /* La langue n'est pas encore connue et Messages n'est pas initialise ! */ Langue = 'E'; /* Par defaut, on prend l'anglais */ ChoixLangue(DirBABEL); CreationPreferences(CheminPref); } 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); Fermeture(fichier); } for (i = 0; i < M_Last_Line; i++) free(Messages[i]); ChoixLangue(DirBABEL); } /************************************ * * ModificationChemin. * ************************************/ void ModificationChemin(char *CheminPref) { FILE *fichier; /* Fichiers KR p.158 */ int erreur, retour; printf("%s\n", Messages[M_Path_Examples]); /* Donner le chemin d'acces aux fichiers d'exemples */ printf("%s\n", Messages[M_Path_exists]); #if SYSTEME == MAC printf("%s\n", Messages[M_Path_MAC]); #elif SYSTEME == UNIX printf("%s\n", Messages[M_Path_UNIX]); #endif scanf("%s", CheminExemples); fichier = fopen(CheminPref, "w"); if (fichier == 0) { erreur = errno; Erreur_fopen(erreur); printf("Le fichier %s n'a pu etre ouvert !\n", CheminPref); printf("Probleme a l'ouverture du fichier des preferences\n"); /* La langue n'est pas encore connue et Messages n'est pas initialise a 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); retour = fclose(fichier); if (retour != 0) { erreur = errno; Erreur_fclose(erreur); printf("Probleme a la fermeture de %s !\n", NOM_PREF); } strcpy(DirExemples, ""); #if SYSTEME == UNIX strcat(DirExemples, DirHome); strcat(DirExemples, "/"); #endif strcat(DirExemples, CheminExemples); #if SYSTEME == MAC strcat(DirExemples, ":"); #elif SYSTEME == UNIX strcat(DirExemples, "/"); #endif } } /************************************ * * ModificationPreferences. * ************************************/ void ModificationPreferences(char *CheminPref, char *DirBABEL) { FILE *fichier; /* Fichiers KR p.158 */ short OptionMenu; int erreur, retour; 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]); /* Modification du chemin des exemples */ do { if (scanf("%hd", &OptionMenu) != 1) { printf("scanf errno\n"); exit(1); } } while ((OptionMenu < Option_Langue) || (OptionMenu > Option_Chemin)); switch (OptionMenu) { case Option_Langue: ModificationLangue(CheminPref, DirBABEL); break; case Option_Chemin: ModificationChemin(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 etre ouvert !\n", NomLong); printf("ChoixLangue interrompu !"); } else { while ((longueur = LireLigne(buffer, TAILLE_BUFFER, fichier)) != 0) if ((buffer[0] != '/') && (isspace(buffer[0]) == 0)) /* On elimine 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]); /* Probleme lors de l'allocation memoire des messages. */ exit(1); } strncpy(Messages[i++], buffer, longueur-1); } Fermeture(fichier); } }