Program TstPFL; { Example for the nwLock unit / NwTP 0.6 API. (c) 1993,1995, R.Spronk } { Tests the following nwLock calls: (Physical File Locking) ClearPhysicalFileSet LogPhysicalFile LockPhysicalFileSet ReleasePhysicalFile } Uses nwFile,nwLock; { using this unit will automatically set the locmode to 1 } Var FileName:string; TimeOutTicks:word; begin TimeOutTicks:=360; {wait 20 seconds before locking process times out} writeln('TSTLF: Test of logical file locking.'); writeln(' -Make sure the files referenced to in this example exist.'); writeln(' -Start the exe on 2 or more workstations & enjoy the effect.'); writeln; { Put the names of files-to-be-locked in the 'logged file set' } FileName:='SYS:PUBLIC/SYSCON.EXE'; IF NOT LogPhysicalFile(FileName,LD_LOG,0) then writeln('Logfile failed. Error# ',nwLock.result); { Note: The files specified have to exist, or an error 156 is returned. Using EXE files instead of data files can be a bit confusing in this example, but at least those files are very likely to be there. } FileName:='SYS:\PUBLIC\PCONSOLE.EXE'; IF NOT LogPhysicalFile(FileName,LD_LOG,0) then writeln('Logfile failed. Error# ',nwLock.result); { Repeat logging process for other (if needed) } { Lock all files that are currently stored in the 'logged file set' } writeln('Attempting to Lock files.. '); IF NOT LockPhysicalFileSet(TimeOutTicks) then writeln('LockFileSet (after TimeOut=20 sec) failed. Error# ',nwLock.result); if nwlock.result=0 { locking of files was successful } then begin { ---Update file, change file, etc.--- } { Readln to simulate update } writeln('Now ''processing'' files. Press RETURN to release locks.'); readln; { Suppose we're done with the 1st datafile, but still need file #2: -unlock 1 single file; keep in log } IF NOT ReleasePhysicalFile('SYS:\PUBLIC\SYSCON.EXE') then writeln('ReleaseFile Failed. Error# ',nwLock.result); writeln('Now ''processing'' still locked file'); end; { unlock all files; clear 'logged file set' } IF NOT ClearPhysicalFileSet then writeln('ClearFileSet Failed. Error# ',nwLock.result); end.