anchor.diff:      lsiTypeSurvey, lsiInternal, lsi3rdParty, lsiActive, lsiDeprecated, lsiDiscouraged, lsiTrial);
     TLoincSubsets = Array [TLoincSubsetId] of Cardinal;
     TLoincPropertyIds = Array [TLoincPropertyType] of Cardinal;
  +
  +  TLoincProviderContextKind = (lpckCode, lpckPart, lpckAnswer);
  +
  +  TLoincProviderContext = class (TCodeSystemProviderContext)
  +  private
  +    FIndex: cardinal;
  +    FKind: TLoincProviderContextKind;
  +  public
  +    constructor create(kind : TLoincProviderContextKind; index : cardinal);
  +    property kind : TLoincProviderContextKind read FKind write FKind;
  +    property index : cardinal read FIndex write FIndex;
  +  end;
   
     TLoincFilterHolderKind = (lfkConcept, lfkAnswer);
   
  
positive.code: 
  function TLoincServices.Code(context: TCodeSystemProviderContext): string;
  var
    index : cardinal;
    iDescription, iStems, iOtherNames : Cardinal;
    iEntry, iCode, iOther, iConcepts, iStem, iParent, iChildren, iDescendents, iDescendantConcepts : Cardinal;
    iComponent, iProperty, iTimeAspect, iSystem, iScale, iMethod, iClass : Cardinal;
    iFlags : Byte;
    lang : byte;
  begin
    index := cardinal(context)-1;
    if index < CodeList.Count then
      CodeList.GetInformation(index, nil, result, iDescription, iOtherNames, iStems, iEntry, iComponent, iProperty, iTimeAspect, iSystem, iScale, iMethod, iClass, iFlags)
    else if index < CodeList.Count + AnswerLists.Count then
    begin
      FAnswerLists.GetEntry(index - CodeList.Count, iCode, iDescription, iOther);
      result := Desc.GetEntry(iCode, lang);
    end
    else
    begin
      FEntries.GetEntry(index - (CodeList.Count + AnswerLists.Count), iCode, iDescription, iParent, iChildren, iDescendents, iConcepts, iDescendantConcepts, iStem);
      result := Desc.GetEntry(iCode, lang);
    end
  end;
  
  function TLoincServices.Display(context: TCodeSystemProviderContext; const lang : THTTPLanguages): string;
  var
    index : cardinal;
    iCode, iDescription, iStems, iOtherNames, iOther : Cardinal;
    iEntry, iParent, iChildren, iDescendents, iConcepts, iDescendantConcepts, iStem : Cardinal;
    iComponent, iProperty, iTimeAspect, iSystem, iScale, iMethod, iClass : Cardinal;
    iFlags : Byte;
    ilang : byte;
  begin
    index := cardinal(context)-1;
    if index < CodeList.Count then
      CodeList.GetInformation(index, langsForLang(lang), result, iDescription, iOtherNames, iEntry, iStems, iComponent, iProperty, iTimeAspect, iSystem, iScale, iMethod, iClass, iFlags)
    else if index < CodeList.Count + AnswerLists.Count then
      FAnswerLists.GetEntry(index - CodeList.Count, iCode, iDescription, iOther)
    else
      FEntries.GetEntry(index - (CodeList.Count + AnswerLists.Count), iCode, iDescription, iParent, iChildren, iDescendents, iConcepts, iDescendantConcepts, iStem);
    result := Desc.GetEntry(iDescription, ilang);
  end;
  
  procedure TLOINCServices.Displays(context: TCodeSystemProviderContext; list: TStringList; const lang : THTTPLanguages);
  
negative.code: function TLoincServices.locate(code: String; var message : String): TCodeSystemProviderContext;
  var
    i : Cardinal;
    s : TLoincStrings;
  begin
    if CodeList.FindCode(code, i) then
      result := TLoincProviderContext.Create(lpckCode, i)
    else if Entries.FindCode(code, i, FDesc) then
      result := TLoincProviderContext.Create(lpckPart, i)
    else if AnswerLists.FindCode(code, i, FDesc) then
      result := TLoincProviderContext.Create(lpckAnswer, i)
    else
      result := nil;//raise ETerminologyError.create('unable to find '+code+' in '+system);
  end;
  