1 {  $Id$  }
2 {
3  /***************************************************************************
4                             lazaruspackageintf.pas
5                             ----------------------
6 
7 
8  ***************************************************************************/
9 
10  *****************************************************************************
11  *  See the file COPYING.modifiedLGPL.txt, included in this distribution,
12  *  for details about the license.
13  *****************************************************************************
14 
15   Author: Mattias Gaertner
16 
17   Abstract:
18     API for packages and registration of units and packages.
19 }
20 unit LazarusPackageIntf;
21 
22 {$mode objfpc}{$H+}
23 
24 interface
25 
26 uses
27   Classes;
28 
29 type
30   TRegisterProc = procedure;
31 
32   TRegisterUnitProc = procedure(const TheUnitName: string;
33                                 RegisterProc: TRegisterProc) of object;
34 
35 type
36   TRegisteredPackage = record
37     Name: string;
38     RegisterProc: TRegisterProc;
39   end;
40   PRegisteredPackage = ^TRegisteredPackage;
41 
42 var
43   RegisteredPackages: TFPList; // list of PRegisteredPackage
44   RegisterUnitProc: TRegisterUnitProc;
45 
46 procedure RegisterUnit(const TheUnitName: string; RegisterProc: TRegisterProc);
47 procedure RegisterPackage(const ThePackageName: string;
48                           RegisterProc: TRegisterProc);
49 procedure ClearRegisteredPackages;
50 
51 implementation
52 
53 procedure RegisterUnit(const TheUnitName: string; RegisterProc: TRegisterProc);
54 begin
55   RegisterUnitProc(TheUnitName,RegisterProc);
56 end;
57 
58 procedure RegisterPackage(const ThePackageName: string;
59   RegisterProc: TRegisterProc);
60 var
61   NewRegisteredPackage: PRegisteredPackage;
62 begin
63   if RegisteredPackages=nil then RegisteredPackages:=TFPList.Create;
64   New(NewRegisteredPackage);
65   NewRegisteredPackage^.Name:=ThePackageName;
66   NewRegisteredPackage^.RegisterProc:=RegisterProc;
67   RegisteredPackages.Add(NewRegisteredPackage);
68 end;
69 
70 procedure ClearRegisteredPackages;
71 var
72   RegisteredPackage: PRegisteredPackage;
73   i: Integer;
74 begin
75   if RegisteredPackages<>nil then begin
76     for i:=0 to RegisteredPackages.Count-1 do begin
77       RegisteredPackage:=PRegisteredPackage(RegisteredPackages[i]);
78       Dispose(RegisteredPackage);
79     end;
80     RegisteredPackages.Free;
81     RegisteredPackages:=nil;
82   end;
83 end;
84 
85 procedure InternalInit;
86 begin
87   RegisterUnitProc:=nil;
88   RegisteredPackages:=nil;
89 end;
90 
91 procedure InternalFinal;
92 begin
93   ClearRegisteredPackages;
94 end;
95 
96 initialization
97   InternalInit;
98 
99 finalization
100   InternalFinal;
101 
102 end.
103 
104