1 unit fidoconf2;
2 
3 interface
4 
5 
6 {$ifdef __GPC__}
7 uses gpcstrings,fconf;
8 {$endif}
9 
10 {$ifdef fpc}
11 	{$ifdef linux}
12     uses fconf,strings;
13 	{$endif}
14 {$linklib fidoconfig}
15 {$endif}
16 
17 
18 {Improved getarea}
Getareaimpnull19 function Getareaimp(config:ps_fidoconfig; areaName:pchar):ps_area;
20 
21 implementation
22 
Getareaimpnull23 function Getareaimp(config:ps_fidoconfig; areaName:pchar):ps_area;
24 type
25  area_array=array[1..10000] of area;
26  ps_area_array=^area_array;
27 var
28  a:ps_area;
29  aa:ps_area_array;
30  i:integer;
31  p:pointer;
32 begin
33 {Netmailarea?}
34 {$ifdef __GPC__}
35 	aa:=ps_area_array(config^.netmailareas^);
36 {$else}
37 	aa:= ps_area_array(config^.netmailareas);
38 {$endif}
39 
40 if stricomp(areaname,'netmailarea')=0 then begin
41 	getareaimp:=@aa^[1];
42     exit;
43 end;
44 
45 for i:=1 to config^.netmailareacount do begin
46 	if stricomp(areaname,aa^[i].areaname)=0 then begin
47 		getareaimp:=@aa^[i];
48 	    exit;
49 	end;
50 end;
51 
52 {normal area?}
53 a:=getarea(config,areaname);
54 if a=@config^.badarea then a:=nil;
55 if a=@config^.dupearea then a:=nil;
56 
57 {localarea}
58 if a=nil then begin
59 	{$ifdef __GPC__}
60 	aa:=ps_area_array(config^.localareas^);
61 	{$else}
62 	aa:=ps_area_array(config^.localareas);
63 	{$endif}
64     for i:=1 to config^.localareacount do begin
65 		{$ifdef __GPC__}
66 		if stricomp(aa^[i].areaname,areaname)=0 then begin
67 			a:=@aa^[i];
68             break;
69         end;
70 		{$else}
71 		if stricomp(aa^[i].areaname,areaname)=0 then begin
72 			a:=@aa^[i];
73             break;
74         end;
75 		{$endif}
76     end;
77 end;
78 getareaimp:=a;
79 end;
80 
81 end.
82