Corretta formattazione

git-svn-id: svn://10.65.10.50/trunk@1317 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 1995-05-02 07:49:17 +00:00
parent 6b65f69796
commit 8d5bb8cd57

View File

@ -1,22 +1,22 @@
/*
@(SH) Funzioni per la gestione dei file a record.
@(SH) Funzioni per la gestione dei file a record.
@(M$) PRIVATE
@(M$) PRIVATE
CalcPos(Rec,Len,Base) : Calcola la posizione del record nel file
CalcPos(Rec,Len,Base) : Calcola la posizione del record nel file
@(C$) PRIVATE
@(C$) PRIVATE
LOCKSEM : 'locksem' ; nome del semaforo utilizzato per il lock
LOCKSEM : 'locksem' ; nome del semaforo utilizzato per il lock
@(VG$) PRIVATE
@(VG$) PRIVATE
ld : struttura su disco che contien i dati per i lock sui file
sizeld : numero di byte occupati dalla struttura ld
semres : flag per l'ok delle operazioni sui semafori
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
*/
ld : struttura su disco che contien i dati per i lock sui file
sizeld : numero di byte occupati dalla struttura ld
semres : flag per l'ok delle operazioni sui semafori
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
*/
#include "ccustio.h"
#include "checks.h"
@ -40,26 +40,26 @@ semres : flag per l'ok delle operazioni sui semafori
#define LOCK_OFF 1200000000L
#ifndef DOS
#define LOCKSEM "locksem"
#define LOCKSEM "locksem"
/* extern long lseek(int, long, int);*/
extern int chsize(int, long);
extern int lockf(int, int, long);
/* extern long lseek(int, long, int);*/
extern int chsize(int, long);
extern int lockf(int, int, long);
#endif
unsigned setlock(unsigned);
int seeklk(SecDef *, long, unsigned, unsigned, long);
unsigned setlock(unsigned);
int seeklk(SecDef *, long, unsigned, unsigned, long);
#ifndef DOS
int semtran(char *);
static void semcall(int, int);
void PS(int);
void VS(int);
int semtran(char *);
static void semcall(int, int);
void PS(int);
void VS(int);
#endif
/*
BOOLEAN test_share()
{
#ifdef DOS
BOOLEAN test_share()
{
#ifdef DOS
static BOOLEAN share_active = 2;
if (share_active == 2)
@ -74,35 +74,35 @@ BOOLEAN test_share()
}
}
return share_active;
#else
#else
return TRUE;
#endif
}
*/
#endif
}
*/
/*
@($) setlock CUSTIO
@($) setlock CUSTIO
@(ID)
Trasforma il modo di lock utente in modo lock XENIX.
@(FD)
@(ID)
Trasforma il modo di lock utente in modo lock XENIX.
@(FD)
@(ISV)
Nella versione XENIX :
@(ISV)
Nella versione XENIX :
lm = numero lock xenix.
@(FSV)
lm = numero lock xenix.
@(FSV)
@(IN)
Restituisce il comando XENIX.
@(FN)
*/
@(IN)
Restituisce il comando XENIX.
@(FN)
*/
unsigned setlock(LockMode)
unsigned setlock(LockMode)
unsigned LockMode; /* Tipo di lock */
{
{
int lm;
@ -119,34 +119,34 @@ Restituisce il comando XENIX.
else lm = F_ULOCK ;
#endif
return(lm) ;
}
}
/*
@($) seeklk CUSTIO
@($) seeklk CUSTIO
@(ID)
Effettua una seek.
@(FD)
@(ID)
Effettua una seek.
@(FD)
@(ISV)
junk = variabile di lavoro.
@(ISV)
junk = variabile di lavoro.
lock = variabile per eseguire comandi di lock.
@(FSV)
*/
lock = variabile per eseguire comandi di lock.
@(FSV)
*/
int seeklk(S, pos, lm, LockMode, rec)
int seeklk(S, pos, lm, LockMode, rec)
SecDef *S ; /* Descrittore file */
long pos ; /* posizione all'interno del file */
unsigned lm ; /* comando di lock per XENIX */
unsigned LockMode; /* comando di lock utente */
long rec; /* n.ro di record */
{
{
if (LockMode != NoLock && S->LockMode != ExclLock)
{
#ifdef DOS
/* if (test_share()) */
/* if (test_share()) */
{
if (_lseek(S->F, LOCK_OFF + rec, SEEK_SET) == -1L)
if ((S->IOR = CIOResult()) != NoErr) return(-1);
@ -166,7 +166,7 @@ lock = variabile per eseguire comandi di lock.
if (lockf(S->F,lm, 1L) == -1)
if ((S->IOR = CIOResult()) != NoErr) return(-1) ;
#endif
}
}
#ifdef DOS
if (_lseek(S->F, pos, SEEK_SET) == -1L)
#else
@ -174,46 +174,46 @@ lock = variabile per eseguire comandi di lock.
#endif
if ((S->IOR = CIOResult()) != NoErr) return(-1) ;
return(0) ;
}
}
/*
@(#) CLockRec CUSTIO
@(#) CLockRec CUSTIO
@(ID)
Esegue un comando lock sul record nro. "rec" del file descritto da "s".
@(FD)
@(ID)
Esegue un comando lock sul record nro. "rec" del file descritto da "s".
@(FD)
@(ISV)
Solo versione XENIX.
@(FSV)
*/
@(ISV)
Solo versione XENIX.
@(FSV)
*/
void CLockRec(s, rec, lockmode)
void CLockRec(s, rec, lockmode)
SecDef *s ; /* descrittore del file */
RecNoType rec ; /* numero record su cui effettuare il lock */
unsigned lockmode;/* operazione lock da effettuare */
{
{
seeklk(s, CalcPos(rec, s->LenRec, s->BaseFil), setlock(lockmode), lockmode, rec);
}
}
/*
@(#) CVerify CUSTIO
@(#) CVerify CUSTIO
@(ID)
Verifica che il file "name" esista.
@(FD)
@(ID)
Verifica che il file "name" esista.
@(FD)
@(ISV)
junk = variabile di lavoro.
@(FSV)
*/
@(ISV)
junk = variabile di lavoro.
@(FSV)
*/
void CVerify(S, Name)
void CVerify(S, Name)
SecDef *S; /* descrittore File */
FileName Name; /* nome file */
{
{
int junk ;
S->IOR = NoErr;
@ -229,28 +229,28 @@ junk = variabile di lavoro.
junk = CIOResult();
if (!S->IOR) S->IOR = junk;
}
}
}
/*
@(#) COpen CUSTIO
@(#) COpen CUSTIO
@(ID)
Apre un file di record.
@(FD)
@(ID)
Apre un file di record.
@(FD)
@(ISV)
junk = variabile di lavoro.
@(FSV)
*/
@(ISV)
junk = variabile di lavoro.
@(FSV)
*/
void COpen(S, Name, Len, Base, LockMode)
void COpen(S, Name, Len, Base, LockMode)
SecDef *S; /* descrittore file */
FileName Name; /* nome del file */
unsigned Len; /* lunghezza record */
unsigned Base; /* offset dall'inizio del file fisico; e' sempre 0 per i file dati */
unsigned LockMode;/* lock di apertura del file */
{
{
int junk;
S->IOR = NoErr;
@ -274,27 +274,27 @@ junk = variabile di lavoro.
S->IOR = CIOResult();
if (close(S->F) == -1) junk = CIOResult();
}
}
}
/*
@(#) CCreate CUSTIO
@(#) CCreate CUSTIO
@(ID)
Crea un nuovo file di record.
@(FD)
@(ID)
Crea un nuovo file di record.
@(FD)
@(ISV)
junk = variabile di lavoro.
@(FSV)
*/
@(ISV)
junk = variabile di lavoro.
@(FSV)
*/
void CCreate(S, Name, Len, Base, MaxSec)
void CCreate(S, Name, Len, Base, MaxSec)
SecDef *S; /* descrittore del file */
FileName Name; /* nome del file */
unsigned Len; /* lunghezza del record */
unsigned Base; /* offset dall'inizio del file fisico */
RecNoType MaxSec; /* Numero di blocchi di disco da allocare */
{
{
int junk;
S->IOR = NoErr;
@ -311,28 +311,28 @@ junk = variabile di lavoro.
junk = CIOResult();
if (!S->IOR) S->IOR = junk;
}
}
}
/*
@(#) CChsize CUSTIO
@(#) CChsize CUSTIO
@(ID)
Cambia la dimensione di un file di record.
@(FD)
@(ID)
Cambia la dimensione di un file di record.
@(FD)
@(ISV)
junk = variabile di lavoro.
@(FSV)
*/
@(ISV)
junk = variabile di lavoro.
@(FSV)
*/
void CChsize(S, Name, Len, Base, MaxSec)
void CChsize(S, Name, Len, Base, MaxSec)
SecDef *S; /* descrittore del file */
FileName Name; /* nome del file */
unsigned Len; /* lunghezza del record */
unsigned Base; /* offset dall'inizio del file fisico */
RecNoType MaxSec; /* numero di blocchi del file modificati */
{
{
int junk;
S->IOR = NoErr;
@ -349,21 +349,21 @@ junk = variabile di lavoro.
junk = CIOResult();
if (!S->IOR) S->IOR = junk;
}
}
}
/*
@(#) CClose CUSTIO
@(#) CClose CUSTIO
@(ID)
Chiude un file di record.
@(FD)
@(ID)
Chiude un file di record.
@(FD)
*/
*/
void CClose(S)
void CClose(S)
SecDef *S; /* descrittore del file da chiudere */
{
{
S->IOR = NoErr;
#ifdef DOS
if (close(S->F) == -1) S->IOR = CIOResult();
@ -382,53 +382,53 @@ Chiude un file di record.
if (exclunlock(S->name, (S->LockMode == ExclLock)) == -1)
S->IOR = CIOResult();
#endif
}
}
/*
@(#) CDelete CUSTIO
@(#) CDelete CUSTIO
@(ID)
Cancella un file di record.
@(FD)
*/
@(ID)
Cancella un file di record.
@(FD)
*/
void CDelete(S, Name)
void CDelete(S, Name)
SecDef *S; /* descrittore del file */
FileName Name; /* Nome del file */
{
{
if (unlink(Name) == -1)
S->IOR = CIOResult();
else
S->IOR = NoErr;
}
}
/*
@(#) CRead CUSTIO
@(#) CRead CUSTIO
@(ID)
Legge un record del file.
@(FD)
@(ID)
Legge un record del file.
@(FD)
@(ISV)
junk = variabile di lavoro.
@(ISV)
junk = variabile di lavoro.
fpos = contiene la posizione del record all'interno del file.
@(FSV)
fpos = contiene la posizione del record all'interno del file.
@(FSV)
@(IN)
Lo spazio necessario a contenere il record letto deve essere stato allocato in precedenza.
@(FN)
*/
@(IN)
Lo spazio necessario a contenere il record letto deve essere stato allocato in precedenza.
@(FN)
*/
void CRead(S, RecBuf, Rec, LockMode)
void CRead(S, RecBuf, Rec, LockMode)
SecDef *S; /* descrittore del file */
RecType RecBuf; /* spazio per contenere il record */
RecNoType Rec; /* Record da leggere */
unsigned LockMode; /* lock sul record */
{
{
int junk;
register RecNoType fpos;
@ -454,33 +454,33 @@ Lo spazio necessario a contenere il record letto deve essere stato allocato in p
}
}
else S->IOR = 3;
}
}
/*
@(#) CWrite CUSTIO
@(#) CWrite CUSTIO
@(ID)
Scrive un record nel file.
@(FD)
@(ID)
Scrive un record nel file.
@(FD)
@(ISV)
junk = variabile di lavoro.
@(ISV)
junk = variabile di lavoro.
fpos = contiene la posizione del record all'interno del file.
@(FSV)
fpos = contiene la posizione del record all'interno del file.
@(FSV)
@(IN)
Lo spazio necessario a contenere il record letto deve essere stato allocato in precedenza.
@(FN)
*/
@(IN)
Lo spazio necessario a contenere il record letto deve essere stato allocato in precedenza.
@(FN)
*/
void CWrite(S, RecBuf, Rec, LockMode)
void CWrite(S, RecBuf, Rec, LockMode)
SecDef *S; /* descrittore del file */
RecType RecBuf; /* spazio che contiene il record da scrivere */
RecNoType Rec; /* numero del record da scrivere */
unsigned LockMode; /* lock sul record */
{
{
int junk;
register RecNoType fpos;
@ -506,68 +506,68 @@ Lo spazio necessario a contenere il record letto deve essere stato allocato in p
}
}
else S->IOR = 3;
}
}
/*
@(#) IDeleteRec CUSTIO
@(#) IDeleteRec CUSTIO
@(ID)
Cancellazione logica di un record.
@(FD)
*/
@(ID)
Cancellazione logica di un record.
@(FD)
*/
void IDeleteRec(RecBuf)
void IDeleteRec(RecBuf)
RecType RecBuf; /* record da cancellare */
{
{
RecBuf[0] = Deleted;
}
}
/*
@(#) IRecallRec CUSTIO
@(#) IRecallRec CUSTIO
@(ID)
Recupero logico di un record.
@(FD)
*/
@(ID)
Recupero logico di un record.
@(FD)
*/
void IRecallRec(RecBuf)
void IRecallRec(RecBuf)
RecType RecBuf; /* record da recuperare logicamente */
{
{
RecBuf[0] = Valid;
}
}
/*
@(#) IRecIsDeleted CUSTIO
@(#) IRecIsDeleted CUSTIO
@(ID)
Controlla se il record in "RecBuf" e' cancellato oppure no.
@(FD)
*/
@(ID)
Controlla se il record in "RecBuf" e' cancellato oppure no.
@(FD)
*/
BOOLEAN IRecIsDeleted(RecBuf)
BOOLEAN IRecIsDeleted(RecBuf)
RecType RecBuf; /* record da controllare */
{
{
return (RecBuf[0] == Deleted);
}
}
/*
@(#) ITestLock CUSTIO
@(#) ITestLock CUSTIO
@(ID)
Controlla se l'errore "err" e' dovuto ad un lock.
@(FD)
@(ID)
Controlla se l'errore "err" e' dovuto ad un lock.
@(FD)
@(ISV)
Versione DOS e XENIX.
@(FSV)
*/
@(ISV)
Versione DOS e XENIX.
@(FSV)
*/
BOOLEAN ITestLock(err)
int err; /* codice di errore */
int err; /* codice di errore */
{
return(TESTLOCK(err)) ;
@ -575,33 +575,33 @@ int err; /* codice di errore */
#ifndef DOS
struct lockdata
{
{
int users;
int excl;
} ld;
} ld;
int sizeld = sizeof(struct lockdata);
/*
@($) lockpath CUSTIO
@($) lockpath CUSTIO
@(ID)
Restituisce il nome del file di lock per il file "name".
@(FD)
@(ID)
Restituisce il nome del file di lock per il file "name".
@(FD)
@(ISV)
path = percorso per il file (/usr/tmp/....).
@(ISV)
path = percorso per il file (/usr/tmp/....).
s1,s,s2 = stringhe di lavoro (nomi file).
s1,s,s2 = stringhe di lavoro (nomi file).
Solo versione XENIX.
@(FSV)
*/
Solo versione XENIX.
@(FSV)
*/
char *lockpath(name)
char *name; /* stringa nome file */
char *name; /* stringa nome file */
{
{
static char path[200];
char *s1 = name, *s = name, *s2 = name;
@ -612,28 +612,28 @@ char *name; /* stringa nome file */
}
sprintf(path, "/usr/tmp/%s", s2);
return(path);
}
}
/*
@($) dirname CUSTIO
@($) dirname CUSTIO
@(ID)
Estrae dal path il nome del direttorio.
@(FD)
@(ID)
Estrae dal path il nome del direttorio.
@(FD)
@(ISV)
path = percorso per il file .
@(ISV)
path = percorso per il file .
s = stringa di lavoro.
s = stringa di lavoro.
Solo versione XENIX.
@(FSV)
*/
Solo versione XENIX.
@(FSV)
*/
char *dirname(name)
char *name; /* stringa contenente il path */
char *name; /* stringa contenente il path */
{
{
static char path[200];
char *s;
@ -641,31 +641,31 @@ char *name; /* stringa contenente il path */
if ((s = strrchr(path, DIRSEP)) == NULL) strcpy(path, ".");
else *s = '\0';
return(path);
}
}
static int semres = 0;
/*
@($) semtran CUSTIO
@($) semtran CUSTIO
@(ID)
Trasforma il nome di un semaforo in un identificatore poi lo crea o lo apre.
@(FD)
@(ID)
Trasforma il nome di un semaforo in un identificatore poi lo crea o lo apre.
@(FD)
@(ISV)
key = chiave corrispondente al nome semaforo.
@(ISV)
key = chiave corrispondente al nome semaforo.
id = identificatore del semaforo.
id = identificatore del semaforo.
Solo versione XENIX.
La semget fa una open sul semaforo; se non lo trova lo crea e poi lo libera.
@(FSV)
*/
Solo versione XENIX.
La semget fa una open sul semaforo; se non lo trova lo crea e poi lo libera.
@(FSV)
*/
int semtran(s)
char *s; /* stringa nome del semaforo */
char *s; /* stringa nome del semaforo */
{
{
register int key = 0, sid;
semres = 0 ;
@ -677,33 +677,33 @@ char *s; /* stringa nome del semaforo */
VS(sid);
}
return(sid);
}
}
/*
@($) semcall CUSTIO
@($) semcall CUSTIO
@(ID)
Chiama il semaforo "sid" e su di esso svolge "op".
@(FD)
@(ID)
Chiama il semaforo "sid" e su di esso svolge "op".
@(FD)
@(ISV)
sb = struttura necessaria per la chiamata a "semop".
@(ISV)
sb = struttura necessaria per la chiamata a "semop".
Solo versione XENIX.
@(FSV)
Solo versione XENIX.
@(FSV)
@(IN)
se op = -1 il semaforo viene occupato.
@(IN)
se op = -1 il semaforo viene occupato.
se op = +1 il semaforo viene liberato.
@(FN)
*/
se op = +1 il semaforo viene liberato.
@(FN)
*/
static void semcall(sid, op)
int sid; /* identificatore semaforo */
int op; /* operazione da effettuare sul semaforo: libero/occupato */
int sid; /* identificatore semaforo */
int op; /* operazione da effettuare sul semaforo: libero/occupato */
{
{
struct sembuf sb;
semres = 0 ;
@ -712,79 +712,79 @@ int op; /* operazione da effettuare sul semaforo: libero/occupato */
sb.sem_flg = 0;
if (semop(sid, &sb, 1) == -1)
semres = -1;
}
}
/*
@($) PS CUSTIO
@($) PS CUSTIO
@(ID)
Acquisisce il semaforo "sid".
@(FD)
@(ID)
Acquisisce il semaforo "sid".
@(FD)
@(ISV)
Solo versione XENIX.
@(FSV)
*/
@(ISV)
Solo versione XENIX.
@(FSV)
*/
void PS(sid)
int sid; /* identificatore semaforo */
int sid; /* identificatore semaforo */
{
{
semcall(sid, -1);
}
}
/*
@($) VS CUSTIO
@($) VS CUSTIO
@(ID)
Rilascia il semaforo "sid".
@(FD)
@(ID)
Rilascia il semaforo "sid".
@(FD)
@(ISV)
Solo versione XENIX.
@(FSV)
*/
@(ISV)
Solo versione XENIX.
@(FSV)
*/
void VS(sid)
int sid;
int sid;
{
{
semcall(sid, 1);
}
}
#endif
/*
@(#) excllock CUSTIO
@(#) excllock CUSTIO
@(ID)
Funzione per la gestione di un lock esclusivo su tutto il file.
@(FD)
@(ID)
Funzione per la gestione di un lock esclusivo su tutto il file.
@(FD)
@(ISV)
Nella versione XENIX:
@(ISV)
Nella versione XENIX:
path = contiene il file di lock.
path = contiene il file di lock.
dir = contiene la directory.
dir = contiene la directory.
fd = identificatore restituito dalla "open".
fd = identificatore restituito dalla "open".
junk = variabile di lavoro.
junk = variabile di lavoro.
sid = identificatore del semaforo su locksem.
sid = identificatore del semaforo su locksem.
errno = numero errore.
errno = numero errore.
sb = struttura che contiene informazioni sullo stato del file (vedi "stat").
sb = struttura che contiene informazioni sullo stato del file (vedi "stat").
@(FSV)
*/
@(FSV)
*/
int excllock(name,excl)
char *name; /* nome del file */
BOOLEAN excl; /* se true deve fare il lock ex. altrimenti no */
char *name; /* nome del file */
BOOLEAN excl; /* se true deve fare il lock ex. altrimenti no */
{
{
#ifndef DOS
char path[200], dir[200];
int fd, junk, sid;
@ -850,33 +850,33 @@ BOOLEAN excl; /* se true deve fare il lock ex. altrimenti no */
if (semres == -1) return(-1);
#endif
return(0);
}
}
/*
@(#) exclunlock CUSTIO
@(#) exclunlock CUSTIO
@(ID)
Gestisce un unlock esclusivo su tutto il file.
@(FD)
@(ID)
Gestisce un unlock esclusivo su tutto il file.
@(FD)
@(ISV)
Nella versione XENIX:
@(ISV)
Nella versione XENIX:
path = contiene il file di lock.
path = contiene il file di lock.
fd = identificatore restituito dalla "open".
fd = identificatore restituito dalla "open".
junk = variabile di lavoro.
junk = variabile di lavoro.
sid = identificatore del semaforo su locksem.
@(FSV)
*/
sid = identificatore del semaforo su locksem.
@(FSV)
*/
int exclunlock(name,excl)
char *name; /* nome file */
BOOLEAN excl; /* se true esegue un unlock sul file */
char *name; /* nome file */
BOOLEAN excl; /* se true esegue un unlock sul file */
{
{
#ifndef DOS
int fd, junk, sid;
char path[200];
@ -921,4 +921,4 @@ BOOLEAN excl; /* se true esegue un unlock sul file */
if (semres == -1) return(-1);
#endif
return(0);
}
}