unit uTMGOptions; //kt Added entire unit. 2/10/10 interface uses IniFiles, SysUtils, Forms, uCore, ORFn, ORNet, Trpcb; var USE_SERVER_INI : boolean; Initialized : boolean; Procedure WriteBool(const Key: String; Value: Boolean; AsDefault : boolean = false); Procedure WriteInteger(const Key: String; Value: Integer; AsDefault : boolean = false); Procedure WriteString(const Key: String; Value: String; AsDefault : boolean = false); Function ReadBool(const Key: String; Default: Boolean): Boolean; Function ReadInteger(const Key: String; Default: Integer): Integer; Function ReadString(const Key: String; Default: String): String; implementation uses Classes; const DEFAULT_SECTION = 'DEFAULT'; var StrList : TStringList; OptionsIniFile : TIniFile; //kt 8/09 procedure TMGOptionsInitialize; begin OptionsIniFile := TIniFile.Create(ChangeFileExt(Application.ExeName, '.INI')); //kt StrList := TStringList.Create; //if RPC exists, use in lieu of INI file RPCBrokerV.remoteprocedure := 'XWB IS RPC AVAILABLE'; RPCBrokerV.Param[0].Value := 'TMG INIFILE GET'; RPCBrokerV.Param[0].ptype := literal; RPCBrokerV.Param[1].Value := 'R'; RPCBrokerV.Param[1].ptype := literal; //RPCResult := RPCBrokerV.StrCall; CallBroker; if RPCBrokerV.Results.Count >0 then begin USE_SERVER_INI := StrToBool(RPCBrokerV.Results.Strings[0]); {returns 1 if available, 0 if not available} end else begin USE_SERVER_INI := false; end; Initialized := true; end; procedure WriteRPCStr(const Section, Key: String; Value: String); begin RPCBrokerV.remoteprocedure := 'TMG INIFILE SET'; RPCBrokerV.Param[0].Value := Section; RPCBrokerV.Param[0].ptype := literal; RPCBrokerV.Param[1].Value := Key; RPCBrokerV.Param[1].ptype := literal; RPCBrokerV.Param[2].Value := Value; RPCBrokerV.Param[2].ptype := literal; //RPCBrokerV.Call; CallBroker; end; function ReadRPCStr(const Section, Key, Default: String) : string; begin RPCBrokerV.remoteprocedure := 'TMG INIFILE GET'; RPCBrokerV.param[0].ptype := literal; RPCBrokerV.param[0].value := Section; RPCBrokerV.Param[1].ptype := literal; RPCBrokerV.param[1].value := Key; RPCBrokerV.Param[2].ptype := literal; RPCBrokerV.param[2].value := Default; //Result := Piece(RPCBrokerV.StrCall,'^',2); CallBroker; if RPCBrokerV.Results.Count > 0 then begin Result := Piece(RPCBrokerV.Results.Strings[0],'^',2); end else begin Result := Default; end; end; Procedure WriteBool(const Key: String; Value: Boolean; AsDefault : boolean = false); begin if Initialized = False then TMGOptionsInitialize; if AsDefault then begin if USE_SERVER_INI then begin WriteRPCStr(DEFAULT_SECTION,Key,BoolToStr(Value)); end else begin OptionsIniFile.WriteBool(DEFAULT_SECTION,Key,Value); end; end else begin if USE_SERVER_INI then begin WriteRPCStr(User.Name,Key,BoolToStr(Value)); end else begin OptionsIniFile.ReadSection(DEFAULT_SECTION,StrList); if (StrList.IndexOf(Key)=-1) or (OptionsIniFile.ReadBool(DEFAULT_SECTION,Key,false)<>Value) then begin OptionsIniFile.WriteBool(User.Name,Key,Value); //Only write user value if differs from default value end; end; end; end; Procedure WriteInteger(const Key: String; Value: Integer; AsDefault : boolean = false); begin if Initialized = False then TMGOptionsInitialize; if AsDefault then begin if USE_SERVER_INI then begin WriteRPCStr(DEFAULT_SECTION,Key,IntToStr(Value)); end else begin OptionsIniFile.WriteInteger(DEFAULT_SECTION,Key,Value); end; end else begin if USE_SERVER_INI then begin WriteRPCStr(User.Name,Key,IntToStr(Value)); end else begin OptionsIniFile.ReadSection(DEFAULT_SECTION,StrList); if (StrList.IndexOf(Key)=-1) or (OptionsIniFile.ReadInteger(DEFAULT_SECTION,Key,-999)<>Value) then begin OptionsIniFile.WriteInteger(User.Name,Key,Value); //Only write user value if differs from default value end; end; end; end; Procedure WriteString(const Key: String; Value: String; AsDefault : boolean = false); begin if Initialized = False then TMGOptionsInitialize; if AsDefault then begin if USE_SERVER_INI then begin WriteRPCStr(DEFAULT_SECTION,Key,Value); end else begin OptionsIniFile.WriteString(DEFAULT_SECTION,Key,Value); end; end else begin if USE_SERVER_INI then begin WriteRPCStr(User.Name,Key,Value); end else begin OptionsIniFile.ReadSection(DEFAULT_SECTION,StrList); if (StrList.IndexOf(Key)=-1) or (OptionsIniFile.ReadString(DEFAULT_SECTION,Key,'xxx')<>Value) then begin OptionsIniFile.WriteString(User.Name,Key,Value); //Only write user value if differs from default value end; end; end; end; Function ReadBool(const Key: String; Default: Boolean): Boolean; begin if Initialized = False then TMGOptionsInitialize; if USE_SERVER_INI then begin Result := StrToBool(ReadRPCStr(User.Name,Key,BoolToStr(Default))); end else begin OptionsIniFile.ReadSection(User.Name,StrList); if StrList.IndexOf(Key) > -1 then begin Result := OptionsIniFile.ReadBool(User.Name,Key,Default); end else begin Result := OptionsIniFile.ReadBool(DEFAULT_SECTION,Key,Default); end; end; end; Function ReadInteger(const Key: String; Default: Integer): Integer; begin if Initialized = False then TMGOptionsInitialize; if USE_SERVER_INI then begin Result := StrToInt(ReadRPCStr(User.Name,Key,IntToStr(Default))); end else begin OptionsIniFile.ReadSection(User.Name,StrList); if StrList.IndexOf(Key) > -1 then begin Result := OptionsIniFile.ReadInteger(User.Name,Key,Default); end else begin Result := OptionsIniFile.ReadInteger(DEFAULT_SECTION,Key,Default); end; end; end; Function ReadString(const Key: String; Default: String): String; begin if Initialized = False then TMGOptionsInitialize; if USE_SERVER_INI then begin Result := ReadRPCStr(User.Name,Key,Default); end else begin OptionsIniFile.ReadSection(User.Name,StrList); if StrList.IndexOf(Key) > -1 then begin Result := OptionsIniFile.ReadString(User.Name,Key,Default); end else begin Result := OptionsIniFile.ReadString(DEFAULT_SECTION,Key,Default); end; end; end; initialization Initialized := false; finalization OptionsIniFile.Free; //kt 8/09 StrList.Free; end.