/*************************************** * * * 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 "SortieLaTeX.h" #include "Utilitaires.h" extern unsigned short NbEtats, MemoireInitiauxAllouee, MemoireFinauxAllouee, InitiauxDejaSpecifies, FinauxDejaSpecifies; extern unsigned long 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; default : printf("Wrong format\n"); } } InitiauxDejaSpecifies = 1; } /**************************************************** * * 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; /* default : printf("Wrong format\n"); */ } } FinauxDejaSpecifies = 1; } /**************************************************** * * EntreeEtatsInitiauxFinaux. OK * ****************************************************/ void EntreeEtatsInitiauxFinaux(void) { if (!InitiauxDejaSpecifies) EntreeEtatsInitiaux(); if (!FinauxDejaSpecifies) EntreeEtatsFinaux(); } /**************************************************** * * EntreePartieStandard. * ****************************************************/ void EntreePartieStandard(void) { unsigned long 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; default : printf("Wrong format\n"); } } } /**************************************************** * * 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; } if (MemoireInitiauxAllouee) for (q = 1; q <= NbEtats; 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; } if (MemoireFinauxAllouee) 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) { unsigned short q; AlloueMemoireInitiaux(); /* Initialisation a 0 automatique */ while (fscanf(fichier, "%hu", &q) == 1) EtatsInitiaux[q] = 1; } /**************************************************** * * LectureFinaux. OK * ****************************************************/ void LectureFinaux(FILE *fichier) { unsigned short q; AlloueMemoireFinaux(); /* Initialisation a 0 automatique */ while (fscanf(fichier, "%hu", &q) == 1) EtatsFinaux[q] = 1; #ifdef DEBUG printf("EtatsFinaux: %d %d %d\n", EtatsFinaux[0], EtatsFinaux[1], EtatsFinaux[2]); #endif /* DEBUG */ /* FinauxDejaSpecifies = 1; est deja fait */ }