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