// var devDimSrv : Integer; { Reference of DIM server device }
// devDimSrv:=RefFind('Device '+ReadIni('DimSrv'));
// if devDimSrv=0 then Trouble('Could not find DIM server device!');
{
Send a message to DIM server.
}
procedure DIM_Send(msg:String);
begin
 if Length(msg)>0 then
 if DevSend(devDimSrv,msg)=0
 then Trouble('Could not send message to '+RefInfo(devDimSrv,'Name'));
end;
{
Refresh tag, i.e. send message to DIM server to update tag.
Do not change tag value.
}
procedure DIM_RefreshTag(tag:Integer);
begin
 if TypeTag(tag)>0 then DIM_Send('##'+Str(tag)+CRLF);
end;
{
Update tag, i.e. assign and send message to DIM server IF ONE CHANGED.
UpdateTag(tag,'')        - update tag, don't change.
UpdateTag(tag,dump(1))   - assign and update integer tag IF ONE CHANGED.
UpdateTag(tag,dump(1.0)) - assign and update real    tag IF ONE CHANGED.
UpdateTag(tag,'abc')     - assign and update string  tag IF ONE CHANGED.
}
procedure DIM_UpdateTag(tag:Integer; s:String);
var tip,i:Integer; r:Real;
begin
 tip:=TypeTag(tag);
 if tip>0 then begin
  if Length(s)=0 then s:='##'+Str(tag) else begin
   if tip=1 then begin
    i:=dump2i(s);
    if iGetTag(tag)<>i then b:=iSetTag(tag,i) else s:='';
   end else
   if tip=2 then begin
    r:=dump2r(s);
    if rGetTag(tag)<>r then b:=rSetTag(tag,r) else s:='';
   end else
   if tip=3 then begin
    if sGetTag(tag)<>s then b:=sSetTag(tag,s) else s:='';
   end;
   if Length(s)>0 then s:='##'+Str(tag)+'='+mime_encode(s);
  end;
  if Length(s)>0 then DIM_Send(s+CRLF);
 end;
end;
