home *** CD-ROM | disk | FTP | other *** search
- (*
- :Program. RemLock
- :Author. Volker Rudolph
- :Address. Medicusstr. 31 / 6750 Kaiserslautern
- :Phone. 0631/17160
- :ShortCut. [vor]
- :Version. 1.0
- :Date. 30.7.89
- :Copyright. PD
- :Language. Modula-II
- :Translator. M2Amiga 3.2d
- :Imports. Printf [vor], ARP [fbs]
- :Contents. Entfernt ⁿberflⁿssige File-Locks
- :Usage. RemLock <DeviceName>
- *)
-
- MODULE RemLock;
-
- FROM Arts IMPORT Terminate,CurrentLevel;
- FROM Arguments IMPORT GetArg,NumArgs;
- FROM ARP IMPORT PathName,dSize;
- FROM Conversions IMPORT StrToVal;
- FROM Dos IMPORT Lock,UnLock,FileLockPtr,sharedLock;
- FROM Exec IMPORT Forbid,Permit;
- FROM Printf IMPORT L,writeProc,Printf0,Printf1,Printf2;
- FROM Terminal IMPORT WriteString,ReadLn;
- FROM SYSTEM IMPORT ADDRESS,BPTR,ADR;
-
- CONST
- MaxLocks = 1000;
- MaxDirs = 10;
-
- TYPE
- LockCount = [1..MaxLocks];
-
- VAR
- lockArr:ARRAY LockCount OF FileLockPtr;
- path:ARRAY [1..dSize*MaxDirs] OF CHAR;
- str:ARRAY [1..80] OF CHAR;
- select:LONGINT;
- lockNum:LockCount;
- len:INTEGER;
- i:LockCount;
- sign:BOOLEAN;
- error:BOOLEAN;
-
- PROCEDURE ReadLocks(path:ARRAY OF CHAR):LockCount;
- VAR
- startLock:FileLockPtr;
- lock:FileLockPtr;
- count:LockCount;
- BEGIN
- startLock := Lock(ADR(path),sharedLock);
- IF startLock = NIL THEN
- Printf1("Can't open %s.\n",ADR(path));
- Terminate(CurrentLevel());
- END; (* IF *)
- lock := startLock^.link;
- count := 1;
- Forbid;
- WHILE (lock # NIL) AND (count < MaxLocks) DO
- lockArr[count] := lock;
- INC(count);
- lock := lock^.link;
- END; (* WHILE *)
- Permit;
- UnLock(startLock);
- RETURN count;
- END ReadLocks;
-
- BEGIN
- writeProc := WriteString;
- GetArg(1,str,len);
- IF (NumArgs() # 1) OR ((str[1] = '?') AND (str[2] = 0C)) THEN
- Printf0("RemLock 1989 by Volker Rudolph\n");
- Printf0("Usage:\n RemLock DeviceName\\A\n");
- Terminate(CurrentLevel());
- END; (* IF *)
- lockNum := ReadLocks(str);
- FOR i := 1 TO lockNum DO
- len := PathName(lockArr[i],ADR(path),MaxDirs);
- Printf2("%2ld: %s\n",i,ADR(path));
- END; (* FOR *)
- Printf0("Lock-number : ");
- ReadLn(str,len);
- StrToVal(str,select,sign,10,error);
- IF error OR sign OR (select = 0) OR (select > L(lockNum)) THEN
- Printf0("\nNothing happened.\n");
- ELSE
- UnLock(lockArr[select]);
- Printf0("\nLock removed.\n");
- END; (* IF *)
- END RemLock.
-