/*********************************************************/ /* Autori: */ /* Pelosi Giovanni, 346787, pelosi */ /* Pesce Agatino, 456868, pesce */ /* */ /* Progetto: Sistemi 2: biblioteca */ /* Data Pr.: 9/2/96 */ /* File: hstdio.c */ /* */ /*********************************************************/ #include <stdio.h> #include <string.h> #include "hstdio.h" #include "libro.h" /***********************************/ /*** stato interazione con stdin ***/ /***********************************/ typedef enum StdState_tag { StdStateInit = 0, /* */ StdStateInpTitolo = 1, /* */ StdStateInpAutore = 2, /* */ StdStateInpAnno = 3, /* */ StdStateQuit = -1 /* */ } StdState_t; /*typedef char bool;*/ static Libro_t Libro; /* ************************************************************************ * * inizializzazione/chiusura * ************************************************************************ */ int InitStdio(void) { puts("Server Initializing"); return 0; } int ExitStdio(void) { puts("Server is Shutting down NOW!!!\n"); return 0; } /* ************************************************************************ * * trattamento stdio * ************************************************************************ */ int HandleStdin(void) { char buffer[LEN_TITOLO+1]; /* Per poter leggere \n e \0 */ static StdState_t stato=StdStateInit; switch(stato) { case StdStateInit: /* Allora la stringa letta e' un comando */ fgets(buffer, sizeof(buffer), stdin); if ( buffer[0]=='a' ) { memset(&Libro, 0, sizeof(Libro)); /* a scanso di equivoci */ stato=StdStateInpTitolo; puts("Inserire:"); puts("Titolo"); puts("Autore"); puts("Anno"); return 0; } if ( buffer[0]=='q' ) return -1; puts("Comandi ammessi:"); puts("a\taggiungi libro"); puts("q\ttermina il server"); return 0; case StdStateInpTitolo: fgets(buffer, sizeof(buffer), stdin); /* Nel caso avessi terminato per troppi caratteri chiudo la stringa*/ /* Nel caso avessi terminato per \n lo tiro via*/ buffer[LEN_TITOLO-1] = 0; if( buffer[strlen(buffer)-1] == '\n' ) buffer[strlen(buffer)-1]=0; strcpy(Libro.Titolo, buffer); stato=StdStateInpAutore; return 0; case StdStateInpAutore: fgets(buffer, sizeof(buffer), stdin); /* Nel caso avessi terminato per troppi caratteri chiudo la stringa*/ /* Nel caso avessi terminato per \n lo tiro via*/ buffer[LEN_AUTORE-1] = 0; if( buffer[strlen(buffer)-1] == '\n' ) buffer[strlen(buffer)-1]=0; strcpy(Libro.Autore, buffer); stato=StdStateInpAnno; return 0; case StdStateInpAnno: fgets(buffer, sizeof(buffer), stdin); /* Nel caso avessi terminato per troppi caratteri chiudo la stringa*/ /* Nel caso avessi terminato per \n lo tiro via*/ buffer[LEN_ANNO-1] = 0; if( buffer[strlen(buffer)-1] == '\n' ) buffer[strlen(buffer)-1]=0; strcpy(Libro.Anno, buffer); AppendLibro(&Libro); stato=StdStateInit; return 0; } return 0; }