anchor.diff:    TKMConvertMode = (cmImportWindows, cmTemplate, cmLexicalModel);
   
     TKMConvertParameters = record
  -    KLID: string;
  -    Destination: string;
  -    KeyboardID: string;
  -    Name: string;
  -    Copyright: string;
  -    FullCopyright: string;
  -    Version: string;
  -    BCP47Tags: string;
  -    Author: string;
  -    Targets: TKeymanTargets;
  -    Mode: TKMConvertMode;
  -    NoLogo: Boolean;
  -
  -    ModelIdAuthor, ModelIdLanguage, ModelIdUniq: string;
     private
  +    FKLID: string;
  +    FDestination: string;
  +    FKeyboardID: string;
  +    FName: string;
  +    FCopyright: string;
  +    FFullCopyright: string;
  +    FVersion: string;
  +    FBCP47Tags: string;
  +    FAuthor: string;
  +    FTargets: TKeymanTargets;
  +    FMode: TKMConvertMode;
  +    FNoLogo: Boolean;
  +    FModelIdAuthor: string;
  +    FModelIdLanguage: string;
  +    FModelIdUniq: string;
  +
       function CheckParam(name, value: string): Boolean;
  +    function SetKLID(const value: string): Boolean;
  +    function SetAuthor(const value: string): Boolean;
  +    function SetBCP47Tags(const value: string): Boolean;
  +    function SetCopyright(const value: string): Boolean;
  +    function SetDestination(const value: string): Boolean;
  +    function SetFullCopyright(const value: string): Boolean;
  +    function SetKeyboardID(const value: string): Boolean;
  +    function SetModelIdAuthor(const value: string): Boolean;
  +    function SetModelIdLanguage(const value: string): Boolean;
  +    function SetModelIdUniq(const value: string): Boolean;
  +    function SetName(const value: string): Boolean;
  +    function SetTargets(const value: string): Boolean;
  +    function SetVersion(const value: string): Boolean;
     public
       procedure WriteUsage;
       function CheckParams: Boolean;
  +
  +    property KLID: string read FKLID;
  +    property Destination: string read FDestination;
  +    property KeyboardID: string read FKeyboardID;
  +    property Name: string read FName;
  +    property Copyright: string read FCopyright;
  +    property FullCopyright: string read FFullCopyright;
  +    property Version: string read FVersion;
  +    property BCP47Tags: string read FBCP47Tags;
  +    property Author: string read FAuthor;
  +    property Targets: TKeymanTargets read FTargets;
  +    property Mode: TKMConvertMode read FMode;
  +    property NoLogo: Boolean read FNoLogo;
  +
  +    property ModelIdAuthor: string read FModelIdAuthor;
  +    property ModelIdLanguage: string read FModelIdLanguage;
  +    property ModelIdUniq: string read FModelIdUniq;
     end;
   
   implementation
  
positive.code: 
  function TKMConvertParameters.CheckParam(name, value: string): Boolean;
  begin
    if name = '-klid' then KLID := value
    else if name = '-o' then Destination := value
    else if name = '-id' then KeyboardID := value
    else if name = '-name' then Self.Name := value
    else if name = '-copyright' then Copyright := value
    else if name = '-full-copyright' then FullCopyright := value
    else if name = '-version' then Version := value
    else if name = '-languages' then BCP47Tags := value
    else if name = '-author' then Author := value
    else if name = '-targets' then Targets := StringToKeymanTargets(value)
    else if name = '-id-author' then ModelIdAuthor := value
    else if name = '-id-language' then ModelIdLanguage := value
    else if name = '-id-uniq' then ModelIdUniq := value
  
    else Exit(False);
    Result := True;
  end;
  
  
negative.code:   begin
      if ParamStr(i) = '-nologo' then
      begin
        FNoLogo := True;
        Inc(i);
        Continue;
      end;
  