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