{ ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» º ÚËÍÍÍË¿ÚËÍÍÍË¿ÚËÍÍÍË¿ÚËÍ» Ë¿ÚËÍÍÍË¿ÚÉÍËÍ»¿ º º ³ÌÍÍÍÊÙÃÎÍÍÍδÀÊÍÍÍË¿³º º º³ÃÎÍÍ º º º ÀÊ ÀÊ ÊÙÀÊÍÍÍÊÙÀÊ ÈÍÊÙÀÊÍÍÍÊÙ Ê º º º º NetWare 3.11 API Library for Turbo Pascal º º by º º S.Perevoznik º º 1996 º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ } Unit NetLock; Interface Uses NetConv; Const cReg = 0; cFull = 1; cRead = 3; Procedure ReleasePhysicalRecordSet; Procedure ClearPhysicalRecordSet; Function ClearPhysicalRecord (FileName : string; RecordStartOffset, RecordLength : LongInt) : byte; Function ReleasePhysicalRecord (FileName : string; RecordStartOffset, RecordLength : LongInt) : byte; Function LockPhysicalRecordSet(LockDirective : byte; TimeOutLimit : word ) : byte; Function LogPhysicalRecord(FileName : string; RecordStartOffset, RecordLength : LongInt; LockDirective : byte; TimeOutLimit : word) : byte; Function LockFileSet(LockDirective : byte; TimeOutLimit : word) : byte; Procedure ReleaseFileSet; Procedure ClearFileSet; Function LogFile(FileName : string; LockDirective : byte; TimeOutLimit : word) : byte; Function ClearFile(FileName : string) : byte; Function ReleaseFile(FileName : string) : byte; Procedure SetLockMode(mode : byte); Function GetLockMode : byte; {-----------------------------------------------------------} Implementation Uses DOS; Procedure ReleasePhysicalRecordSet; var r : registers; Begin r.AH := $C3; Intr($21,r); End; Procedure ClearPhysicalRecordSet; var r : registers; Begin r.AH := $C4; intr($21,r); End; Function ClearPhysicalRecord (FileName : string; RecordStartOffset, RecordLength : LongInt) : byte; var r : registers; FileHandle : word; Begin r.AH := $3D; r.DS := SEG(FileName[1]); r.DX := OFS(FileName[1]); r.AL := 0; FileName[length(FileName)+1] := chr(0); intr($21,r); if (r.FLAGS and FCARRY ) = 0 then begin FileHandle := r.AX; r.AH := $BE; r.BX := FileHandle; Long2Int(RecordStartOffset,r.DX,r.CX); Long2Int(RecordLength,r.DI,r.SI); intr($21,r); ClearPhysicalRecord := r.AL; end else ClearPhysicalRecord := $80; End; Function ReleasePhysicalRecord (FileName : string; RecordStartOffset, RecordLength : LongInt) : byte; var r : registers; FileHandle : word; Begin r.AH := $3D; r.DS := SEG(FileName[1]); r.DX := OFS(FileName[1]); r.AL := 0; FileName[length(FileName)+1] := chr(0); intr($21,r); if (r.FLAGS and FCARRY ) = 0 then begin FileHandle := r.AX; r.AH := $BD; r.BX := FileHandle; Long2Int(RecordStartOffset,r.DX,r.CX); Long2Int(RecordLength,r.DI,r.SI); intr($21,r); ReleasePhysicalRecord := r.AL; end else ReleasePhysicalRecord := $80; End; Function LockPhysicalRecordSet(LockDirective : byte; TimeOutLimit : word ) : byte; var r : registers; Begin r.AH := $C2; r.AL := LockDirective; r.BP := TimeOutLimit; intr($21,r); LockPhysicalRecordSet := r.AL; End; Function LogPhysicalRecord(FileName : string; RecordStartOffset, RecordLength : LongInt; LockDirective : byte; TimeOutLimit : word) : byte; var r : registers; FileHandle : word; Begin r.AH := $3D; r.DS := SEG(FileName[1]); r.DX := OFS(FileName[1]); r.AL := 0; FileName[length(FileName)+1] := chr(0); intr($21,r); if (r.FLAGS and FCARRY ) = 0 then begin FileHandle := r.AX; r.AH := $BC; r.BX := FileHandle; Long2Int(RecordStartOffset,r.DX,r.CX); Long2Int(RecordLength,r.DI,r.SI); r.AL := LockDirective; r.BP := TimeOutLimit; intr($21,r); LogPhysicalRecord := r.AL; R.AH := $3E; R.BX := FileHandle; Intr($21,R); end else LogPhysicalRecord := $80; End; Function LockFileSet(LockDirective : byte; TimeOutLimit : word) : byte; var r : registers; Begin r.AH := $CB; r.bp := TimeOutLimit; r.AL := LockDirective; intr($21,r); LockFileSet := r.AL; End; Procedure ReleaseFileSet; var r : registers; Begin r.AH := $CD; intr($21,r); End; Procedure ClearFileSet; var r : registers; Begin r.AH := $CF; intr($21,r); End; Function LogFile(FileName : string; LockDirective : byte; TimeOutLimit : word) : byte; var r : registers; Begin r.AH := $EB; r.BP := TimeOutLimit; r.AL := LockDirective; r.DS := SEG(FileName[1]); r.DX := OFS(FileName[1]); FileName[length(FileName)+1] := chr(0); intr($21,r); LogFile := r.AL; End; Function ClearFile(FileName : string) : byte; var r : registers; Begin r.AH := $ED; r.DS := SEG(FileName[1]); r.DX := OFS(FileName[1]); FileName[length(FileName)+1] := chr(0); intr($21,r); ClearFile := r.AL; End; Function ReleaseFile(FileName : string) : byte; var r : registers; Begin r.AH := $EC; r.DS := SEG(FileName[1]); r.DX := OFS(FileName[1]); FileName[length(FileName)+1] := chr(0); intr($21,r); ReleaseFile := r.AL; End; Procedure SetLockMode(mode : byte); var r : registers; Begin r.AH := $C6; r.AL := Mode; intr($21,r); End; Function GetLockMode : byte; var r : registers; Begin r.AH := $C6; r.AL := $02; intr($21,r); GetLockMode := r.AL; End; end.