Specifiche Interne Modulo 4
[Modulo4]
Il valore di un campo di un record e' cosi' memorizzato:
CHARACTER
- Il campo viene memorizzato come sequenza di caratteri ascii di valore tra 0 e 127 compresi. Sul record, il campo e' seguito da un NULL.
NUMERIC
- Il campo viene memorizzato come double in Network Byte Order ed e' seguito da un NULL;
DATE
- Il campo viene memorizzato come long (rappresenta la data in formato Julian Date in secondi) in Network Byte Order ed e' seguito da un NULL;
LOGICAL
- Il campo viene memorizzato come un singolo byte: se il valore passato e' diverso da 0 viene memorizzato il valore TRUE, altrimenti il valore FALSE. E'seguito da un NULL.
La sequenza dei valori in ogni record sul file rispetta la sequenza dei campi definiti nell'header.
Non vi sono funzioni di conversione Host-To_Nework e viceversa per il formato double. E' quindi necessario sviluppare una funzione che verifichi l'ordinamento dei byte e sviluppare le funzioni di conversione host-to-network e network-to-host.
E' permesso leggere tutto il record anche se vengono richiesti solo alcuni campi. Non e' consentito leggere un blocco piu' grande di un record. La lettura sposta il record corrente al record successivo. Vengono letti tanti byte quanto e' la lunghezza del campo, anche se i byte sono nulli.
La sequenza dei campi che vengono richiesti in lettura può essere qualunque, quindi va fatta attenzione a calcolare il punto di inizio del campo nell'ambito del record.
Il campo value della struttura FIELD_VALUE_t è un void *, quindi può essere utilizzato per leggere qualunque tipo di dato.
E' permesso riscrivere tutto il record anche se devono essere modificati solo alcuni campi. Non e' consentito scrivere un blocco dati piu' grande di un record. Ovviamente i valori da non modificare vanno preservati leggendo prima il record. Per questa operazione non e' permesso utilizzare la ReadRecord() anche se possono essere utilizzate funzioni interne che pero' non effettuino controlli inutili quali la riverifica dell handle o altri controlli gia' effettuati. In altre parole non e' consentito richiamare una funzione che implementi tutta la logica della ReadRecord() ma solo funzioni interne di lettura del record e conversione dei valori. Anche in questo caso il record corrente si incrementa di 1, cioè ci si deve posizionare alla fine del record scritto.
La sequenza dei campi nel vettore di strutture FieldValue e' arbitrario, quindi va fatta attenzione a calcolare il punto di inizio del campo nell'ambito del record.
L'implementazione della LocateRecord() non può utilizzare la funzione GotoRecord() del Modulo3 per lo spostamento su file né la funzione ReadRecord(). Se il record viene trovato deve essere modificata la posizione del puntatore di lettura/scrittura sempre senza utilizzare la GotoRecord(), altrimenti il puntatore deve essere riportato alla posizione di partenza.
Generated on Tue May 23 15:52:17 2006 for LPC - Modulo 4 by
1.4.6-NO