| 1 | unit uTMGOptions;
 | 
|---|
| 2 | //kt Added entire unit.  2/10/10
 | 
|---|
| 3 | 
 | 
|---|
| 4 | interface
 | 
|---|
| 5 | 
 | 
|---|
| 6 | uses
 | 
|---|
| 7 |   IniFiles, SysUtils, Forms, uCore, ORFn,  ORNet, Trpcb;
 | 
|---|
| 8 | 
 | 
|---|
| 9 | var
 | 
|---|
| 10 |   USE_SERVER_INI : boolean;
 | 
|---|
| 11 |   Initialized : boolean;
 | 
|---|
| 12 | 
 | 
|---|
| 13 |   Procedure WriteBool(const Key: String; Value: Boolean; AsDefault : boolean = false);
 | 
|---|
| 14 |   Procedure WriteInteger(const Key: String; Value: Integer; AsDefault : boolean = false);
 | 
|---|
| 15 |   Procedure WriteString(const Key: String; Value: String; AsDefault : boolean = false);
 | 
|---|
| 16 |   Function ReadBool(const Key: String; Default: Boolean): Boolean;
 | 
|---|
| 17 |   Function ReadInteger(const Key: String; Default: Integer): Integer;
 | 
|---|
| 18 |   Function ReadString(const Key: String; Default: String): String;
 | 
|---|
| 19 | 
 | 
|---|
| 20 | implementation
 | 
|---|
| 21 | 
 | 
|---|
| 22 | uses
 | 
|---|
| 23 |   Classes;
 | 
|---|
| 24 | 
 | 
|---|
| 25 | const
 | 
|---|
| 26 |   DEFAULT_SECTION = 'DEFAULT';
 | 
|---|
| 27 | 
 | 
|---|
| 28 | var
 | 
|---|
| 29 |   StrList : TStringList;
 | 
|---|
| 30 |   OptionsIniFile : TIniFile;  //kt 8/09
 | 
|---|
| 31 |   
 | 
|---|
| 32 |   procedure TMGOptionsInitialize;
 | 
|---|
| 33 |   begin
 | 
|---|
| 34 |     OptionsIniFile := TIniFile.Create(ChangeFileExt(Application.ExeName, '.INI'));  //kt
 | 
|---|
| 35 |     StrList := TStringList.Create;
 | 
|---|
| 36 | 
 | 
|---|
| 37 |     //if RPC exists, use in lieu of INI file
 | 
|---|
| 38 |     RPCBrokerV.remoteprocedure := 'XWB IS RPC AVAILABLE';
 | 
|---|
| 39 |     RPCBrokerV.Param[0].Value := 'TMG INIFILE GET';
 | 
|---|
| 40 |     RPCBrokerV.Param[0].ptype := literal;
 | 
|---|
| 41 |     RPCBrokerV.Param[1].Value := 'R';
 | 
|---|
| 42 |     RPCBrokerV.Param[1].ptype := literal;
 | 
|---|
| 43 |     //RPCResult := RPCBrokerV.StrCall;   {returns 1 if available, 0 if not available}
 | 
|---|
| 44 |     USE_SERVER_INI := StrToBool(RPCBrokerV.StrCall);
 | 
|---|
| 45 |     Initialized := true;
 | 
|---|
| 46 |   end;
 | 
|---|
| 47 | 
 | 
|---|
| 48 |   procedure WriteRPCStr(const Section, Key: String; Value: String);
 | 
|---|
| 49 |   begin
 | 
|---|
| 50 |     RPCBrokerV.remoteprocedure := 'TMG INIFILE SET';
 | 
|---|
| 51 |     RPCBrokerV.Param[0].Value := Section;
 | 
|---|
| 52 |     RPCBrokerV.Param[0].ptype := literal;
 | 
|---|
| 53 |     RPCBrokerV.Param[1].Value := Key;
 | 
|---|
| 54 |     RPCBrokerV.Param[1].ptype := literal;
 | 
|---|
| 55 |     RPCBrokerV.Param[2].Value := Value;
 | 
|---|
| 56 |     RPCBrokerV.Param[2].ptype := literal;
 | 
|---|
| 57 |     RPCBrokerV.Call;
 | 
|---|
| 58 |   end;
 | 
|---|
| 59 | 
 | 
|---|
| 60 |   function ReadRPCStr(const Section, Key, Default: String) : string;
 | 
|---|
| 61 |   begin
 | 
|---|
| 62 |     RPCBrokerV.remoteprocedure := 'TMG INIFILE GET';
 | 
|---|
| 63 |     RPCBrokerV.param[0].ptype := literal;
 | 
|---|
| 64 |     RPCBrokerV.param[0].value := Section;
 | 
|---|
| 65 |     RPCBrokerV.Param[1].ptype := literal;
 | 
|---|
| 66 |     RPCBrokerV.param[1].value := Key;
 | 
|---|
| 67 |     RPCBrokerV.Param[2].ptype := literal;
 | 
|---|
| 68 |     RPCBrokerV.param[2].value := Default;
 | 
|---|
| 69 |     Result := Piece(RPCBrokerV.StrCall,'^',2);
 | 
|---|
| 70 |   end;
 | 
|---|
| 71 | 
 | 
|---|
| 72 | 
 | 
|---|
| 73 |   Procedure WriteBool(const Key: String; Value: Boolean; AsDefault : boolean = false);
 | 
|---|
| 74 |   begin
 | 
|---|
| 75 |     if Initialized = False then TMGOptionsInitialize;
 | 
|---|
| 76 |     if AsDefault then begin
 | 
|---|
| 77 |       if USE_SERVER_INI then begin
 | 
|---|
| 78 |         WriteRPCStr(DEFAULT_SECTION,Key,BoolToStr(Value));
 | 
|---|
| 79 |       end else begin
 | 
|---|
| 80 |         OptionsIniFile.WriteBool(DEFAULT_SECTION,Key,Value);
 | 
|---|
| 81 |       end;
 | 
|---|
| 82 |     end else begin
 | 
|---|
| 83 |       if USE_SERVER_INI then begin
 | 
|---|
| 84 |         WriteRPCStr(User.Name,Key,BoolToStr(Value));
 | 
|---|
| 85 |       end else begin
 | 
|---|
| 86 |         OptionsIniFile.ReadSection(DEFAULT_SECTION,StrList);
 | 
|---|
| 87 |         if (StrList.IndexOf(Key)=-1) or (OptionsIniFile.ReadBool(DEFAULT_SECTION,Key,false)<>Value) then begin
 | 
|---|
| 88 |           OptionsIniFile.WriteBool(User.Name,Key,Value);  //Only write user value if differs from default value
 | 
|---|
| 89 |         end;
 | 
|---|
| 90 |       end;
 | 
|---|
| 91 |     end;
 | 
|---|
| 92 |   end;
 | 
|---|
| 93 | 
 | 
|---|
| 94 |   Procedure WriteInteger(const Key: String; Value: Integer; AsDefault : boolean = false);
 | 
|---|
| 95 |   begin
 | 
|---|
| 96 |     if Initialized = False then TMGOptionsInitialize;
 | 
|---|
| 97 |     if AsDefault then begin
 | 
|---|
| 98 |       if USE_SERVER_INI then begin
 | 
|---|
| 99 |         WriteRPCStr(DEFAULT_SECTION,Key,IntToStr(Value));
 | 
|---|
| 100 |       end else begin
 | 
|---|
| 101 |         OptionsIniFile.WriteInteger(DEFAULT_SECTION,Key,Value);
 | 
|---|
| 102 |       end;
 | 
|---|
| 103 |     end else begin
 | 
|---|
| 104 |       if USE_SERVER_INI then begin
 | 
|---|
| 105 |         WriteRPCStr(User.Name,Key,IntToStr(Value));
 | 
|---|
| 106 |       end else begin
 | 
|---|
| 107 |         OptionsIniFile.ReadSection(DEFAULT_SECTION,StrList);
 | 
|---|
| 108 |         if (StrList.IndexOf(Key)=-1) or (OptionsIniFile.ReadInteger(DEFAULT_SECTION,Key,-999)<>Value) then begin
 | 
|---|
| 109 |           OptionsIniFile.WriteInteger(User.Name,Key,Value);  //Only write user value if differs from default value
 | 
|---|
| 110 |         end;
 | 
|---|
| 111 |       end;
 | 
|---|
| 112 |     end;
 | 
|---|
| 113 |   end;
 | 
|---|
| 114 | 
 | 
|---|
| 115 |   Procedure WriteString(const Key: String; Value: String; AsDefault : boolean = false);
 | 
|---|
| 116 |   begin
 | 
|---|
| 117 |     if Initialized = False then TMGOptionsInitialize;
 | 
|---|
| 118 |     if AsDefault then begin
 | 
|---|
| 119 |       if USE_SERVER_INI then begin
 | 
|---|
| 120 |         WriteRPCStr(DEFAULT_SECTION,Key,Value);
 | 
|---|
| 121 |       end else begin
 | 
|---|
| 122 |         OptionsIniFile.WriteString(DEFAULT_SECTION,Key,Value);
 | 
|---|
| 123 |       end;
 | 
|---|
| 124 |     end else begin
 | 
|---|
| 125 |       if USE_SERVER_INI then begin
 | 
|---|
| 126 |         WriteRPCStr(User.Name,Key,Value);
 | 
|---|
| 127 |       end else begin
 | 
|---|
| 128 |         OptionsIniFile.ReadSection(DEFAULT_SECTION,StrList);
 | 
|---|
| 129 |         if (StrList.IndexOf(Key)=-1) or (OptionsIniFile.ReadString(DEFAULT_SECTION,Key,'xxx')<>Value) then begin
 | 
|---|
| 130 |           OptionsIniFile.WriteString(User.Name,Key,Value);  //Only write user value if differs from default value
 | 
|---|
| 131 |         end;
 | 
|---|
| 132 |       end;
 | 
|---|
| 133 |     end;
 | 
|---|
| 134 |   end;
 | 
|---|
| 135 | 
 | 
|---|
| 136 |   Function ReadBool(const Key: String; Default: Boolean): Boolean;
 | 
|---|
| 137 |   begin
 | 
|---|
| 138 |     if Initialized = False then TMGOptionsInitialize;
 | 
|---|
| 139 |     if USE_SERVER_INI then begin
 | 
|---|
| 140 |       Result := StrToBool(ReadRPCStr(User.Name,Key,BoolToStr(Default)));
 | 
|---|
| 141 |     end else begin
 | 
|---|
| 142 |       OptionsIniFile.ReadSection(User.Name,StrList);
 | 
|---|
| 143 |       if StrList.IndexOf(Key) > -1 then begin
 | 
|---|
| 144 |         Result := OptionsIniFile.ReadBool(User.Name,Key,Default);
 | 
|---|
| 145 |       end else begin
 | 
|---|
| 146 |         Result := OptionsIniFile.ReadBool(DEFAULT_SECTION,Key,Default);
 | 
|---|
| 147 |       end;
 | 
|---|
| 148 |     end;
 | 
|---|
| 149 |   end;
 | 
|---|
| 150 | 
 | 
|---|
| 151 |   Function ReadInteger(const Key: String; Default: Integer): Integer;
 | 
|---|
| 152 |   begin
 | 
|---|
| 153 |     if Initialized = False then TMGOptionsInitialize;
 | 
|---|
| 154 |     if USE_SERVER_INI then begin
 | 
|---|
| 155 |       Result := StrToInt(ReadRPCStr(User.Name,Key,IntToStr(Default)));
 | 
|---|
| 156 |     end else begin
 | 
|---|
| 157 |       OptionsIniFile.ReadSection(User.Name,StrList);
 | 
|---|
| 158 |       if StrList.IndexOf(Key) > -1 then begin
 | 
|---|
| 159 |         Result := OptionsIniFile.ReadInteger(User.Name,Key,Default);
 | 
|---|
| 160 |       end else begin
 | 
|---|
| 161 |         Result := OptionsIniFile.ReadInteger(DEFAULT_SECTION,Key,Default);
 | 
|---|
| 162 |       end;
 | 
|---|
| 163 |     end;
 | 
|---|
| 164 |   end;
 | 
|---|
| 165 | 
 | 
|---|
| 166 |   Function ReadString(const Key: String; Default: String): String;
 | 
|---|
| 167 |   begin
 | 
|---|
| 168 |     if Initialized = False then TMGOptionsInitialize;
 | 
|---|
| 169 |     if USE_SERVER_INI then begin
 | 
|---|
| 170 |       Result := ReadRPCStr(User.Name,Key,Default);
 | 
|---|
| 171 |     end else begin
 | 
|---|
| 172 |       OptionsIniFile.ReadSection(User.Name,StrList);
 | 
|---|
| 173 |       if StrList.IndexOf(Key) > -1 then begin
 | 
|---|
| 174 |         Result := OptionsIniFile.ReadString(User.Name,Key,Default);
 | 
|---|
| 175 |       end else begin
 | 
|---|
| 176 |         Result := OptionsIniFile.ReadString(DEFAULT_SECTION,Key,Default);
 | 
|---|
| 177 |       end;
 | 
|---|
| 178 |     end;
 | 
|---|
| 179 |   end;
 | 
|---|
| 180 | 
 | 
|---|
| 181 | 
 | 
|---|
| 182 | initialization
 | 
|---|
| 183 |   Initialized := false;
 | 
|---|
| 184 | 
 | 
|---|
| 185 | 
 | 
|---|
| 186 | finalization
 | 
|---|
| 187 |   OptionsIniFile.Free;  //kt 8/09
 | 
|---|
| 188 |   StrList.Free;
 | 
|---|
| 189 | 
 | 
|---|
| 190 | end.
 | 
|---|
| 191 | 
 | 
|---|