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} Getareaimpnull19function Getareaimp(config:ps_fidoconfig; areaName:pchar):ps_area; 20 21 implementation 22 Getareaimpnull23function 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