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