Specifiche comuni a tutti i Moduli


Modules

 Costanti
 Strutture
 Funzioni comuni

Functions

void LPC_GestioneErrore (int ErrorCode, char *Func, char *Msg)
 Stampa l'errore.
int OpenDatabaseFile (char *Name)
 Apre un file di database con nome Name.
int CloseDatabaseFile (int handle)
 Chiude un file di database aperto.
int GetDBFInfo (int handle, DBF_INFO_t *DBFInfo)
 Chiede informazioni su un file di database aperto.
int GetFieldInfo (int handle, int NumFields, FIELD_DATA_t *FieldData)
 Chiede informazioni sui campi di un database aperto.
int IsDBFHandle (int handle)
 Verifica se un handle e' valido.

Function Documentation

int CloseDatabaseFile int  handle  ) 
 

Chiude un file di database aperto.

handle deve essere un handle valido ricavato da una precedente chiamata alla OpenDatabaseFile(). Il file DBF viene chiuso e viene cancellato il file che indica un database aperto, cioè il file che ha lo stesso nome del DBF ma estensione ma estensione DBF_OPEN_EXT.

Parameters:
[in] handle L'handle del database aperto.
Returns:
LPC_OK Database chiuso

LPC_BAD_ARG handle non valido

LPC_FILE_ACCESS Errore di chiusura file

See also:
CreateDatabaseFile(), OpenDatabaseFile().
Author:
Gianni Campanile

Stefano Guerrini

Andrea Sterbini

Date:
Gennaio 2006
Version:
1.0

int GetDBFInfo int  handle,
DBF_INFO_t DBFInfo
 

Chiede informazioni su un file di database aperto.

handle deve essere un handle valido ricavato da una precedente chiamata alla OpenDatabaseFile(). Riempie la struttura DBFInfo di tipo DBF_INFO_t con tutte le informazioni del DBF. In particolare il record corrente (campo CurrentRec) e' sempre > 0, anche se non ci sono record (in quel caso vale 1). Indica infatti il punto di inizio di lettura del prossimo record. Per sapere se ci sono record, bisogna leggere il campo NumRecs.

Parameters:
[in] handle L'handle del database aperto.
[out] DBFInfo Struttura che riceve le informazioni
Returns:
LPC_OK Informazioni ottenute

LPC_BAD_ARG handle non valido o puntatore NULL

LPC_ERR_READ Errore di lettura del file

LPC_ERR_SEEK Errore di posizione sul file

See also:
CreateDatabaseFile(), OpenDatabaseFile(), GetFieldInfo()
Author:
Gianni Campanile

Stefano Guerrini

Andrea Sterbini

Date:
Gennaio 2006
Version:
1.0

int GetFieldInfo int  handle,
int  NumFields,
FIELD_DATA_t FieldData
 

Chiede informazioni sui campi di un database aperto.

handle deve essere un handle valido ricavato da una precedente chiamata alla OpenDatabaseFile(). Riempie il vettore di strutture FieldData con le informazioni sui campi di un database precedentemente aperto con OpenDatabaseFile().
La struttura FieldData deve contenere in input i nomi dei campi di cui si vogliono le informazioni, e NumFields deve essere settato al numero di elementi riempiti di FieldData. Se NumFields vale 0, vengono ritornate tutte le informazioni sui campi e FieldData deve essere allocato opportunamente.

Parameters:
[in] handle L'handle del database aperto
[in] NumFields Numero di elementi del vettore FieldData oppure 0
[in,out] FieldData Vettore di strutture di dimensione NumFields con i nomi dei campi oppure senza nomi campi (ma allocato, se NumFields e' 0)
Returns:
LPC_OK Informazioni ottenute

LPC_BAD_ARG handle non valido, NumFields < 0 o puntatore FieldData NULL

LPC_BAD_FIELD campo non valido

LPC_ERR_READ Errore di lettura del file

LPC_ERR_SEEK Errore di posizione sul file

LPC_NO_MEMORY Errore in allocazione memoria.

See also:
CreateDatabaseFile(), OpenDatabaseFile(), GetDBFInfo().
Author:
Gianni Campanile

Stefano Guerrini

Andrea Sterbini

Date:
Gennaio 2006
Version:
1.0

int IsDBFHandle int  handle  ) 
 

Verifica se un handle e' valido.

Ritorna LPC_OK se l'handle e' valido altrimenti LPC_BAD_ARG

Parameters:
[in] handle L'handle da verificare.
Returns:
LPC_OK handle valido

LPC_BAD_ARG handle non valido

Author:
Gianni Campanile

Stefano Guerrini

Andrea Sterbini

Date:
Gennaio 2006
Version:
1.0

void LPC_GestioneErrore int  ErrorCode,
char *  Func,
char *  Msg
 

Stampa l'errore.

Scrive un codice di errore, la funzione chiamante e un messaggio di errore. L'errore viene stampato su stderr.

Il parametro ErrorCode è il codice di errore. Func e' il nome della funzione che sta intercettando l'errore e Msg e' il messaggio di errore.

Da notare che Func non è il nome della funzione che ha generato un errore, ma il nome della funzione che lo ha ricevuto.
Il messaggio di errore e' una stringa che puo' contenere le informazioni aggiuntive per il miglior monitoraggio dell'errore.

I codici di errore delle funzioni da implementare sono già definiti in LPC_Include.h

Tutti i codice di errore sono negativi.

Esempio di gestione dell'errore:

        int Insert()
        {
        ....
                if (NumFields < 0)
                {
                        char Err[256];
                        (void) sprintf(Err, "Errore parametro NumFields negativo");
                        LPC_GestioneErrore(LPC_BAD_ARG, "Insert", Err);
                        < Liberare tutta la memoria allocata in questa funzione >
                        return(LPC_BAD_ARG);
                }
        ....
        }

Esempio di gestione dell'errore su allocazione memoria:

        int Insert()
        {
        ....
                buf = calloc(10, sizeof(long));
                if (!buf)
                {
                        char Err[256];
                        (void) sprintf(Err, "Errore allocazione memoria");
                        LPC_GestioneErrore(LPC_NO_MEMORY, "Insert", Err);
                        < Liberare tutta la memoria allocata in questa funzione >
                        return(LPC_NO_MEMORY);
                }
        ....
        }

Esempio di gestione dell'errore ritornato da una chiamata ad una funzione di sistema:

        int Insert()
        {
        ....
                ret = fwrite(buffer, sizeof(char), len, fp);
                if (ret != len)
                {
                        char Err[256];
                        (void) sprintf(Err, "Errore di sistema [%d] in scrittura su file:[%s]", errno, strerror(errno));
                        LPC_GestioneErrore(LPC_ERR_WRITE, "Insert", Err);
                        < Liberare tutta la memoria allocata in questa funzione >
                        return(LPC_ERR_WRITE);
                }
        ....
        }

Esempio di gestione errore per una chiamata ad una funzione interna:

        int Insert()
        {
        ... 
                ret = GetDBFInfo(handle, &DBFInfo);
                if (ret != LPC_OK)
                {
                        char Err[256];
                        (void) sprintf(Err, "Errore chiamata alla GetDBFInfo:[%d]", ret);
                        LPC_GestioneErrore(ret, "Insert", Err);
                        return(ret);
                }
        ....
        }

Parameters:
[in] ErrorCode Codice dell'errore
[in] Func Funzione da cui viene la chiamata
[in] Msg Messaggio di errore
Author:
Gianni Campanile

Stefano Guerrini

Andrea Sterbini

Date:
Gennaio 2006
Version:
1.0

int OpenDatabaseFile char *  Name  ) 
 

Apre un file di database con nome Name.

Name è una stringa non nulla e NULL terminated e rappresenta il nome del file da creare.
Il nome del file deve contenere solo caratteri alfanumerici + il carattere '_' e deve iniziare con un carattere alfabetico.
La lunghezza totale del nome viene troncata a DBF_NAME_LENGTH caratteri e viene aggiunta l'estensione DBF_EXTENSION.
Per indicare che un DBF e' in uso viene creato un altro file con lo stesso nome ed estensione DBF_OPEN_EXT.

Siccome il sistema e' single-user, non e' possibile aprire lo stesso file piu' volte.

Il database file deve essere stato precedentemente creato con la CreateDatabaseFile(). La funzione ritorna un handle che deve essere utilizzato per chiamate ad altre funzioni.

Una volta aperto il file può essere usato e poi chiuso con la CloseDatabaseFile().

Il record corrente viene settato a 1, anche se non ci sono record nel DBF.

Parameters:
[in] Name Nome del database file, stringa alfanumerica + '_' NULL terminated.
Returns:
>= 0 handle del database file aperto

LPC_BAD_ARG Nome DBF nullo o non valido

LPC_DBF_OPEN DBF gia' aperto

LPC_FILE_ACCESS File non esistente o non accessibile

LPC_NO_SPACE Massimo numero di DBF aperti

LPC_NO_MEMORY Errore di allocazione memoria

LPC_ERR_READ Errore di lettura file

LPC_ERR_SEEK Errore di spostamento su file

See also:
CreateDatabaseFile(), CloseDatabaseFile().
Author:
Gianni Campanile

Stefano Guerrini

Andrea Sterbini

Date:
Gennaio 2006
Version:
1.0


Generated on Sun Apr 2 15:38:58 2006 for LPC - Modulo 2 by  doxygen 1.4.6-NO