[Back to FILES SWAG index] [Back to Main SWAG index] [Original]
{
>MM> Is there a way to LOCK specific records or areas in a binary file so
>MM> that one program can access the 1st byte of file and another program
>MM> access the 2nd byte of the program at the same time?
TC> Here's something from my own tool
TC> box of tricks:
}
function FLock(Lock:byte; Handle: Word; Pos,Len: LongInt): Word; Assembler;
ASM
mov AL,Lock { subfunction 0: lock region }
{ subfunction 1: unlock region }
mov AH,$5C { DOS function $5C: FLOCK }
mov BX,Handle { put FileHandle in BX }
les DX,Pos
mov CX,ES { CX:DX begin position }
les DI,Len
mov SI,ES { SI:DI length lockarea }
int $21 { Call DOS ... }
jb @End { if error then return AX }
xor AX,AX { else return 0 }
@End:
end {FLock};
Comes in handy when descending TDosStream.
TLockStream = object(TDosStream)
procedure write(var buf;count:word); virtual;
end;
Procedure TLockStream.write(var buf;count:word);
var isLocked : integer;
curpos : longint;
Begin
curpos := getpos;
isLocked := Flock(0,handle,curpos,count);
if isLocked < 2
then begin
inherited write(buf,count);
if isLocked = 0
then Flock(1,handle,curpos,count);
end
else status := isLocked;
End;
[Back to FILES SWAG index] [Back to Main SWAG index] [Original]