/*********************************************************/
/* Autori: */
/* Pelosi Giovanni, 346787, pelosi */
/* Pesce Agatino, 456868, pesce */
/* */
/* Progetto: Sistemi 2: biblioteca */
/* Data Pr.: 9/2/96 */
/* File: libro.c */
/* */
/*********************************************************/
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include "libro.h"
#include "support.h"
static FILE* Catalogo;
static Libro_t Libro;
/*
************************************************************************
*
* inizializzazione/chiusura
*
************************************************************************
*/
int InitLibro(char* filename)
{
Catalogo = fopen(filename,"a+");
if (!Catalogo)
ErrExit("InitLibro: apertura file catalogo");
Libro.Titolo[0]=0;
Libro.Autore[0]=0;
Libro.Anno[0]=0;
return 0;
}
int ExitLibro(void)
{
fclose(Catalogo);
return 0;
}
/*
************************************************************************
*
* accesso a dato statico
*
************************************************************************
*/
Libro_t* RetrieveLibro(void)
{
return &Libro;
}
/*
************************************************************************
*
* visualizzazione libro (usata per debug)
*
************************************************************************
*/
void DumpLibro(Libro_t* pLibro)
{
puts("------------------");
puts(pLibro->Titolo);
puts(pLibro->Autore);
puts(pLibro->Anno);
puts("-Premere un tasto-");
getchar();
}
/*
************************************************************************
*
* legge un libro da file catalogo
*
************************************************************************
*/
int LeggiLibro(void)
{
char buffer[LEN_TITOLO+1]; /* Per leggere \0 e \n */
assert( Catalogo );
if (fgets(buffer, LEN_TITOLO+1, Catalogo)==NULL)
return FALSE;
/* Nel caso avessi terminato per troppi caratteri chiudo la stringa */
buffer[LEN_TITOLO-1]=0;
/* Nel caso avessi terminato con \n lo tiro via */
if( buffer[strlen(buffer)-1] == '\n' )
buffer[strlen(buffer)-1]=0;
strncpy(Libro.Titolo, buffer, sizeof(Libro.Titolo));
if (fgets(buffer, LEN_AUTORE+1, Catalogo)==NULL)
return FALSE;
/* Nel caso avessi terminato per troppi caratteri chiudo la stringa */
buffer[LEN_AUTORE-1]=0;
/* Nel caso avessi terminato con \n lo tiro via */
if( buffer[strlen(buffer)-1] == '\n' )
buffer[strlen(buffer)-1]=0;
strncpy(Libro.Autore, buffer, sizeof(Libro.Autore));
if (fgets(buffer, LEN_ANNO+1, Catalogo)==NULL)
return FALSE;
/* Nel caso avessi terminato per troppi caratteri chiudo la stringa */
buffer[LEN_ANNO-1]=0;
/* Nel caso avessi terminato con \n lo tiro via */
if( buffer[strlen(buffer)-1] == '\n' )
buffer[strlen(buffer)-1]=0;
strncpy(Libro.Anno, buffer, sizeof(Libro.Anno));
return TRUE;
}
/*
************************************************************************
*
* scrive un libro su file catalogo
*
************************************************************************
*/
int ScriviLibro(Libro_t* pLibro)
{
assert( Catalogo );
if (fprintf(Catalogo, "%s\n%s\n%s\n",
pLibro->Titolo, pLibro->Autore, pLibro->Anno)==EOF)
return FALSE;
else
return TRUE;
}
/*
************************************************************************
*
* Aggiunge il Record in fondo al file
*
************************************************************************
*/
int AppendLibro(Libro_t* pLibro)
{
assert( Catalogo );
fseek(Catalogo, 0L, SEEK_END);
return ScriviLibro(pLibro);
}
/*
************************************************************************
*
* Cerca il prossimo libro dopo la posizione Start. Start=0 primo libro
*
************************************************************************
*/
long SearchLibro(Libro_t * pPattern, long Start)
{
assert( Catalogo );
fseek(Catalogo, Start, SEEK_SET);
while(LeggiLibro())
{
if( strstr(Libro.Titolo, pPattern->Titolo) != ((char*)0) )
/* Qui il libro trovato sta gia' in static Libro */
return ftell(Catalogo);
}
return 0;
}