home *** CD-ROM | disk | FTP | other *** search
/ Merciful 5 / Merciful - Disc 5.iso / software / p / pcqpascalv1.2d.lha / Examples2 / NotifyDemo / Notify.p
Encoding:
Text File  |  1997-05-06  |  2.5 KB  |  92 lines

  1. Program Notify;
  2.  
  3. { Mit der Notify-Funktion der DOS-Library kann man Dateien oder
  4.   ganze Verzeichnisse auf Schreibzugriffe überwachen. So kann
  5.   z.B. ein Programm sich sofort anpassen wenn seine Konfigurations-
  6.   Datei verändert wurde. (so macht es z.B. IPrefs)
  7.  
  8.   Dieses Programm zeigt die Benutzung der NotifyRequest-Struktur.
  9.   Diese wurde aufgrund von Problemen bei der Umsetzung der Includes
  10.   von C nach Pascal etwas verändert.
  11.  
  12.   In der NotifyRequest-Struktur befindet sich das 8 Byte große Feld
  13.   nr_Stuff (Offset 16). Dieses muß je nach nr_Flags mit den ausgefüllten
  14.   Strukturen nr_Msg oder nr_Signal über CopyMem gefüllt werden (siehe Programm).
  15.  
  16.  
  17.   -Autor: Andreas Tetzl
  18.   -Datum: 21.12.1994
  19. }
  20.  
  21.  
  22. {$I "Include:DOS/DOS.i"}
  23. {$I "Include:DOS/Notify.i"}
  24. {$I "Include:Exec/ports.i"}
  25. {$I "Include:Exec/Memory.i"}
  26. {$I "Include:Utils/Break.i"}
  27. {$I "Include:Utils/StringLib.i"}
  28.  
  29. Const nr_Stuff_Offset = 16;
  30.  
  31. VAR nr : NotifyRequestPtr;
  32.     nr_Message : nr_Msg;
  33.     MyPort : MsgPortPtr;
  34.     Msg : NotifyMessagePtr;
  35.     Name : String;
  36.  
  37. Begin
  38.  { NotifyRequest-Struktur initialisieren }
  39.  New(nr);
  40.  
  41.  Name:=AllocString(100);
  42.  Writeln("NotifyDemo 1994 by Andreas Tetzl\n");
  43.  Writeln("Bitte geben Sie den Namen der Datei oder des Verzeichnisses an, welche(s) Sie");
  44.  Write("überprüfen möchten: ");
  45.  Readln(Name);
  46.  Writeln;
  47.  
  48.  { MsgPort erstellen }
  49.  MyPort:=CreateMsgPort();
  50.  If MyPort=NIL then
  51.   Begin
  52.    Writeln("Kann MessagePort nicht erstellen.");
  53.    FreeString(Name);
  54.    Dispose(nr);
  55.    Exit(10);
  56.   end;
  57.  
  58.  { Adresse des Ports in nr_Msg-Struktur }
  59.  nr_Message.nr_Port:=MyPort;
  60.  
  61.  nr^.nr_Name:=Name;    { Zu überprüfende(s) Datei/Verzeichnis }
  62.  nr^.nr_Flags:=NRF_SEND_MESSAGE;   { nr_Stuff enthält eine nr_Msg-Struktur }
  63.  { nr Msg in nr_Stuff kopieren }
  64.  CopyMem(adr(nr_Message),address(Integer(nr)+nr_Stuff_Offset),4);
  65.            { Quelle }                { Ziel }             { Länge (8 bei nr_Signal) }
  66.  
  67.  { Notify starten }
  68.  If StartNotify(nr) then
  69.   Begin
  70.    Writeln("Überprüfe ",nr^.nr_FullName);
  71.    Writeln("Bitte versuchen Sie einen Schreibzugriff auf diese(s) Datei/Verzeichnis");
  72.    Writeln;
  73.    Writeln("Ende mit CTRL-C");
  74.    
  75.    Repeat
  76.     Delay(25);  { Wegen Prozessorauslastung }
  77.     Msg:=NotifyMessagePtr(GetMsg(MyPort));  { Message abholen }
  78.     If Msg<>NIL then  { Nachicht erhalten }
  79.      Begin
  80.       ReplyMsg(MessagePtr(Msg));  { beantworten }
  81.       Writeln("Schreibzugriff auf ",nr^.nr_FullName," ausgeführt.");
  82.      end;
  83.    Until CheckBreak;
  84.    { Notify beenden }
  85.    EndNotify(nr);
  86.   end;
  87.  
  88.  Dispose(nr);
  89.  { MsgPort schließen }
  90.  DeleteMsgPort(MyPort);
  91. end.
  92.