/*********************************************************/
/* 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;
}