home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / progpas / lockmsg.arj / RA_LOCK.PAS next >
Pascal/Delphi Source File  |  1991-08-08  |  2KB  |  78 lines

  1. Unit RA_Lock;
  2.  
  3. InterFace
  4.  
  5. Function LockMsgBase(FileName : String) : Boolean;   { Lock message base }
  6. { FileName must be path+name to MSGINFO.BBS }
  7. Function UnLockMsgBase : Boolean;                    { Unlock message base }
  8.  
  9. Implementation
  10.  
  11. Uses Dos,Crt;
  12.  
  13. Var
  14.   Regs  : Registers;
  15.   i     : Integer;
  16.   Error : Boolean;
  17.  
  18. Function LockMsgBase(FileName : String) : Boolean;
  19.  
  20. Var
  21.   Count : Byte;
  22.   F     : File;
  23.  
  24.   Function GetFileHandle(FileName : String; Var Error : Boolean): Integer;
  25.   Begin
  26.     FileName:= FileName + #0;
  27.     FillChar(Regs,sizeof(Regs),0);
  28.     Regs.ah:=$3D; Regs.al:=66;           { 66 er Read/Write+Deny none  (2+64) }
  29.     Regs.ds:=Seg(FileName); Regs.dx:=Ofs(FileName)+1;
  30.     MsDos(Regs);
  31.     i:=Regs.AX;
  32.     If (Lo(Regs.Flags) And $01) > 0 Then
  33.     Begin Error := True; GetFileHandle := 0;  Exit; End;
  34.     GetFileHandle := i;
  35.   End;
  36.  
  37.   Function Lock : Boolean;
  38.   Begin
  39.     Regs.ax:=$5c00; Regs.bx:=i; Regs.cx:=0; Regs.dx:=407; Regs.si:=0; Regs.di:=1;
  40.     MsDos(Regs);
  41.     If (Lo(Regs.Flags) And $01) > 0 Then Lock:=False
  42.       Else Lock:=True;
  43.   End;
  44.  
  45. Begin
  46.   Error:=False;
  47.   i:=GetFileHandle(FileName,Error);
  48.   If Not Error Then
  49.   Begin
  50.     Count:=0;
  51.     While (Not Lock) and (Count<150) and (Regs.ax=$21) Do
  52.     Begin
  53.       Delay(100);
  54.       Inc(Count);
  55.     End;
  56.     If Count<150 Then LockMsgBase:=True
  57.     Else If Regs.ah<>0 Then LockMsgBase:=False;
  58.   End
  59.   Else LockMsgBase:=False;
  60. End;
  61.  
  62. Function UnLockMsgBase : Boolean;
  63.  
  64.   Procedure CloseFileHandle(i: integer);
  65.   Begin
  66.     Regs.ah:=$3E;Regs.bx:=i;
  67.     Intr($21,Regs);
  68.   End;
  69.  
  70. Begin
  71.   Regs.ax:=$5c01;Regs.bx:=i;Regs.cx:=0;Regs.dx:=407;Regs.si:=0;Regs.di:=1;
  72.   Intr($21,Regs);
  73.   If (Lo(Regs.Flags) And $01) > 0 Then UnLockMsgBase:=False
  74.     Else UnLockMsgBase:=True;
  75.   CloseFileHandle(i);
  76. End;
  77.  
  78. End.