{------------------------------------------------------------------------------}
{
   Unit Name: kini
   Purpose  : Some helper functions
   Author   : Vesa Lappalainen
   Date     : 15.2.1997
   Changed  : 29.09.2001/vl
    + VCL/CLX-käännös (määrittele vakio CLX)

   ToDo     :
}
{------------------------------------------------------------------------------}

unit kini;


interface
  uses IniFiles,
{$ifdef CLX}
  QGraphics,
{$else}
  Graphics,
{$endif}
  SysUtils;

//  const chNoColor = -2;    { Vakio laittomalle värille                         }

function ReadColor(
  Ini:TCustomIniFile;            { i  Valmiiksi avattu ini-tiedosto            }
  section:string;                { i  [section]                                }
  entry:string;                  { i  entry=                                   }
  def: TColor                    { i  oletus jos väriä ei löydy                }
 ):TColor;                       { f  ko. kohdan alta löytynyt väri            }
procedure WriteColor(
  Ini:TCustomIniFile;            { i  Valmiiksi avattu ini-tiedosto            }
  section:string;                { i  [section]                                }
  entry:string;                  { i  entry=                                   }
  color:TColor);                 { i  väri                                     }

function SeparateInt(            { Erottaa kokonaisluvun                       }
  var st:string;                 { io Jono josta erotetaan, muuttuu            }
  sep :Char;                     { i  erotinmerkki                             }
  def : integer                  { i  oletus, jos ei kunnon lukua              }
):Integer;                       { f  erotettu kokonaisluku                    }

function HexSt(                  { Muuttaa intin heksaluvuksi                  }
  i,                             { i  muutettava luku                          }
  w:integer                      { i  luvun leveys                             }
) : string;                      { f  muutettu jono                            }

function StrToFont(const s:string;font:TFont):boolean;
function FontToStr(const font:TFont):string;

implementation

uses kstring;

{------------------------------------------------------------------------------}
function ReadColor(
  Ini:TCustomIniFile;            { i  Valmiiksi avattu ini-tiedosto            }
  section:string;                { i  [section]                                }
  entry:string;                  { i  entry=                                   }
  def: TColor                    { i  oletus jos väriä ei löydy                }
 ):TColor;                       { f  ko. kohdan alta löytynyt väri            }
{ Luetaan ini-tiedostosta väritieto                                            }
begin
  Result := Ini.ReadInteger(section,entry,def);
end;

{------------------------------------------------------------------------------}
procedure WriteColor(
  Ini:TCustomIniFile;            { i  Valmiiksi avattu ini-tiedosto            }
  section:string;                { i  [section]                                }
  entry:string;                  { i  entry=                                   }
  color:TColor);                 { i  väri                                     }
{ Kirjoitetaan väri ini-tiedostoon entry=$800000                               }
begin
//  if ( color = chNoColor ) then exit;
  Ini.WriteString(section,entry,format('$%x',[color]));
end;

{------------------------------------------------------------------------------}
function SeparateInt(            { Erottaa kokonaisluvun                       }
  var st:string;                 { io Jono josta erotetaan, muuttuu            }
  sep :Char;                     { i  erotinmerkki                             }
  def : integer                  { i  oletus, jos ei kunnon lukua              }
):Integer;                       { f  erotettu kokonaisluku                    }
var p:integer; s:string;
begin
  p := pos(sep,st);
  if ( p = 0 ) then begin s := st; st := ''; end
  else begin s := Copy(st,1,p-1); Delete(st,1,p); end;
  Result := StrToIntDef(s,def);
end;


{------------------------------------------------------------------------------}
function HexSt(                  { Muuttaa intin heksaluvuksi                  }
  i,                             { i  muutettava luku                          }
  w:integer                      { i  luvun leveys                             }
) : string;                      { f  muutettu jono                            }
var len : integer;
begin
  Result := '$0000000000000'+format('%x',[i]);
  len := Length(Result);
  Delete(Result,2,len-w-1);
end;

function StrToFont(const s:string;font:TFont):boolean;
var p1,p2:string; p : ^byte; sty: TFontStyles;
begin
  Result := false;
  if ( s = '' ) then exit;
  Result := true;
  p2 := s;
  p1 := Separate(p2,';');
  if ( p1 <> '' ) then font.Name := p1;
  p1 := Separate(p2,';');
  font.Size := StrToIntDef(p1,font.Size);
  p1 := Separate(p2,';');
  sty := font.Style;
  p := Addr(sty);
  p^ := StrToIntDef(p1,p^);
  font.Style := sty;
  p1 := Separate(p2,';');
  font.Color := StrToIntDef(p1,font.Color);
end;

function FontToStr(const font:TFont):string;
var p : ^byte; sty: TFontStyles;
begin
  sty := font.Style;
  p := Addr(sty);
  Result := font.Name + ';' +
            IntToStr(font.Size) + ';' +
            IntToStr(p^) + ';' +
            format('$%x',[Font.Color]);
end;

end.
