/*************************************** * * * Copyright (c) 1998 Jean-Eric Pin * * All rights reserved. * * * * TAB = 2 spaces * * * ***************************************/ /*------------------------------------------------------------------- * InitiauxFinaux.c Jean-Eric Pin 18/04/97 *------------------------------------------------------------------- */ #include <stdlib.h> #include <stdio.h> #include <errno.h> #include "Erreurs.h" #include "Globales.h" #include "InitiauxFinaux.h" #include "Main.h" #include "Memoire.h" #include "Sortie.h" #include "Utilitaires.h" extern unsigned short NbEtats, InitiauxASpecifer, FinauxASpecifer; extern numero NbElements; extern char s[TAILLE_CHAINE_MAX]; extern info *Table; /* La table contenant les informations sur les elements */ extern short *EtatsInitiaux, *EtatsFinaux; extern char **Messages; /**************************************************** * * EntreeEtatsInitiaux. * ****************************************************/ void EntreeEtatsInitiaux(void) { short q; char Type; AlloueMemoireInitiaux(); printf("%s\n", Messages[M_Initial]); /* Donner les etats initiaux en terminant par } */ printf("I = {"); while ((Type = LireChaines(s)) != '}') { switch(Type) { case NOMBRE : q = atoi(s); if ((q >= 0) && (q <= NbEtats)) EtatsInitiaux[q] = 1; break; case ',' : case ';' : case ':' : case '.' : break; } } } /**************************************************** * * EntreeEtatsFinaux. * ****************************************************/ void EntreeEtatsFinaux(void) { short q; char Type; AlloueMemoireFinaux(); /* Initialisation a 0 automatique */ printf("%s\n", Messages[M_Final]); /* Donner les etats finaux en terminant par } */ printf("F = {"); while ((Type = LireChaines(s)) != '}') { switch(Type) { case NOMBRE : q = atoi(s); if ((q >= 0) && (q <= NbEtats)) EtatsFinaux[q] = 1; break; case ',' : case ';' : case ':' : case '.' : break; } } } /**************************************************** * * EntreeEtatsInitiauxFinaux. OK * ****************************************************/ void EntreeEtatsInitiauxFinaux(void) { if (InitiauxASpecifer) EntreeEtatsInitiaux(); if (FinauxASpecifer) EntreeEtatsFinaux(); } /**************************************************** * * EntreePartieStandard. * ****************************************************/ void EntreePartieStandard(void) { numero n; char Type; printf("\n"); SortieListeElements(); /* Pour connaitre les numeros des elements... */ printf("%s\n", Messages[M_P]); /* Donner les numeros des elements de P en terminant par } */ printf("P = {"); while ((Type = LireChaines(s)) != '}') { switch(Type) { case NOMBRE : n = atol(s); if ((n >= 1) && (n <= NbElements)) Table[n].Statut |= EST_DANS_P; break; case ',' : case ';' : case ':' : case '.' : break; } } } /**************************************************** * * SauvegardeInitiaux. OK * ****************************************************/ void SauvegardeInitiaux(FILE *fichier) { short q; int erreur; if (fprintf(fichier, " %% Etats initiaux\n") < 0) { erreur = errno; printf("fprintf %% Etats initiaux failed!\n"); Erreur_printf(erreur); return; } printf("NbEtats = %d\n", NbEtats); for (q = 0; q <= NbEtats; q++) { printf("* q = %d\n", q); if (EtatsInitiaux[q] == 1) if (fprintf(fichier, "%d ", q) < 0) { erreur = errno; printf("fprintf %d failed!\n", q); Erreur_printf(erreur); return; } } if (fprintf(fichier, "\n") < 0) { erreur = errno; printf("fprintf \\n failed!\n"); Erreur_printf(erreur); return; } } /**************************************************** * * SauvegardeFinaux. OK * ****************************************************/ void SauvegardeFinaux(FILE *fichier) { short q; int erreur; if (fprintf(fichier, " %% Etats finaux\n") < 0) { erreur = errno; printf("fprintf %% Etats finaux failed!\n"); Erreur_printf(erreur); return; } for (q = 1; q <= NbEtats; q++) if (EtatsFinaux[q] == 1) if (fprintf(fichier, "%d ", q) < 0) { erreur = errno; printf("fprintf %d failed!\n", q); Erreur_printf(erreur); return; } if (fprintf(fichier, "\n") < 0) { erreur = errno; printf("fprintf \\n failed!\n"); Erreur_printf(erreur); return; } } /**************************************************** * * LectureInitiaux. OK * ****************************************************/ void LectureInitiaux(FILE *fichier) { short q; char buffer[TAILLE_BUFFER]; fgets(buffer, TAILLE_BUFFER, fichier); /* Pour absorber le \n */ fgets(buffer, TAILLE_BUFFER, fichier); /* Ligne % Etats initiaux */ AlloueMemoireInitiaux(); /* Initialisation a 0 automatique */ while (fscanf(fichier, "%hu", &q) == 1) EtatsInitiaux[q] = 1; } /**************************************************** * * LectureFinaux. OK * ****************************************************/ void LectureFinaux(FILE *fichier) { short q; char buffer[TAILLE_BUFFER]; fgets(buffer, TAILLE_BUFFER, fichier); /* Pour absorber le \n */ fgets(buffer, TAILLE_BUFFER, fichier); /* Ligne % Etats finaux */ AlloueMemoireFinaux(); /* Initialisation a 0 automatique */ while (fscanf(fichier, "%hu", &q) == 1) EtatsFinaux[q] = 1; }